Pergunta

Quando um controlador renderiza uma visualização baseada em um modelo, você pode obter as propriedades da coleção ViewData usando o indexador (ou seja,ViewData["Propriedade"]).No entanto, tenho um controle de usuário compartilhado que tentei chamar usando o seguinte:

return View("Message", new { DisplayMessage = "This is a test" });

e no meu controle de mensagens eu tinha isso:

<%= ViewData["DisplayMessage"] %>

Eu acho que isso renderizaria DisplayMessage corretamente, no entanto, null está sendo retornado.Depois de uma grande dose de ajustes, finalmente criei uma classe "MessageData" para digitar fortemente meu controle de usuário:

public class MessageControl : ViewUserControl<MessageData>

e agora esta chamada funciona:

return View("Message", new MessageData() { DisplayMessage = "This is a test" });

e pode ser exibido assim:

<%= ViewData.Model.DisplayMessage %>

Por que a propriedade DisplayMessage não seria adicionada ao ViewData (ou seja,coleção ViewData["DisplayMessage"]) sem digitação forte no controle do usuário?Isso é intencional?Não faria sentido que ViewData contivesse uma chave para “DisplayMessage”?

Foi útil?

Solução

O método

ViewData.Eval("DisplayMessage") 

deve funcionar para você.

Outras dicas

É claro que depois de criar esta pergunta, encontro imediatamente a resposta após mais algumas pesquisas no Google

http://forums.asp.net/t/1197059.aspx

Aparentemente, isso acontece por causa da classe wrapper.Mesmo assim, parece que qualquer propriedade passada deve ser adicionada à coleção ViewData por padrão.

Eu realmente preciso parar de responder minhas próprias perguntas :(

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top