Когда контроллер отображает представление на основе модели, вы можете получить свойства из коллекции ViewData, используя индексатор (т.е. ViewData ["Property"]). Однако у меня есть общий пользовательский элемент управления, который я пытался вызвать, используя следующее:
return View("Message", new { DisplayMessage = "This is a test" });
и на моем контроле сообщений у меня было это:
<%= ViewData["DisplayMessage"] %>
Я думаю, что это правильно отобразит DisplayMessage, однако возвращается ноль. После тяжелой работы я наконец-то создал класс «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»?