Asp.net MVC User Control ViewData


5

Когда контроллер отображает представление на основе модели, вы можете получить свойства из коллекции ViewData с помощью индексатора (т. Е. ViewData ["Property"]). Тем не менее, у меня есть общий пользовательский элемент управления, который я пытался звонить, используя следующее:

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

и на моем контроле сообщений у меня было так:

<%= ViewData["DisplayMessage"] %> 

Я думаю, что это будет правильно оказывать DisplayMessage, однако возвращается null. После тяжелой дозы мастерить вокруг, я, наконец, создал класс «MessageData» для того, чтобы сильно ввести свой пользовательский элемент управления:

public class MessageControl : ViewUserControl<MessageData> 

и теперь этот вызов работает:

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

и может отображаться как это:

<%= ViewData.Model.DisplayMessage %> 

Почему бы не свойство DisplayMessage быть добавлено к ViewData (т.е. ViewData [ «DisplayMessage»].) коллекция без строгой типизации пользовательского элемента управления? Это по дизайну? Не имеет ли смысл, что ViewData будет содержать ключ для «DisplayMessage»?

6

Метод

ViewData.Eval("DisplayMessage") 

должны работать для вас.


2

Конечно после того, как я создаю этот вопрос, я сразу найти ответ после того, как несколько более поисков на Google

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

Видимо, это происходит из-за класса-оболочки. Тем не менее, кажется, что любое переданное свойство должно быть добавлено в коллекцию ViewData по умолчанию.

мне действительно нужно прекратить отвечать на мои собственные вопросы :(