ASP.NET MVC 2 DisplayFor ()
-
13-09-2019 - |
Pergunta
Eu estou olhando para a nova versão do ASP.NET MVC (veja aqui para mais detalhes se você ainda não viu já) e eu estou tendo alguns problemas bastante básico exibir o conteúdo de um objeto.
No meu controle eu tenho um objeto do tipo Person
, o que eu estou passando à vista em ViewData.Model
. Tudo está bem até agora e eu posso extrair o objeto na vista prontos para exibição. O que eu não entendo, porém, é como eu preciso chamar o método Html.DisplayFor()
, a fim de obter os dados para a tela. Eu tentei o seguinte ...
<%
MVC2test.Models.Person p = ViewData.Model as MVC2test.Models.Person;
%>
// snip
<%= Html.DisplayFor(p => p) %>
mas eu recebo a seguinte mensagem:
CS0136: Uma variável local chamado 'p' não pode ser declarada neste âmbito, pois daria um significado diferente para 'p', que já é usado em um "pai ou atual escopo para denotar algo mais
Eu sei que isto não é o que eu deveria estar fazendo - eu sei que redefinir uma variável produzirá este erro, mas eu não sei como acessar o objeto do controlador. Então, minha pergunta é: como faço para passar o objeto à vista, a fim de exibir suas propriedades?
NB. Devo acrescentar que eu estou lendo sobre isso no meu tempo livre limitado, por isso é inteiramente possível que eu tenha perdido alguma coisa fundamental.
TIA
Solução
Html.DisplayFor
pode ser usado somente quando sua opinião é fortemente tipado, e funciona no objeto que foi passado para a View.
Assim, para o seu caso, você deve declarar sua opinião com o tipo de pessoa como seu tipo de modelo, (por exemplo something.something.View<Person>
) (desculpe, não me lembro os nomes exatos, mas isso deve fazer sentido), e, em seguida, ao chamar Html.DisplayFor(p => p)
, p
levaria o valor do valor do modelo passado (Pessoa) na vista.
Hope que fazia sentido.
Outras dicas
p já é um nome de variável; e nomes de variáveis ??têm de ser único em todo o escopo atual. Portanto displayFor (p => p) não é válido, como você está declarando uma nova variável 'p' lá. Dessa forma, o compilador não sabe wether usar seu Person p, ou a variável (p =>).
Então, basta renomeá-lo para
<%= Html.DisplayFor(person => person) %>