Asp.net MVC Пользовательский контроль ViewData
Когда контроллер отображает представление на основе модели, вы можете получить свойства из коллекции 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"?
2 ответа
Конечно, после создания этого вопроса я сразу же найду ответ после нескольких поисков в Google.
http://forums.asp.net/t/1197059.aspx
По-видимому, это происходит из-за класса-оболочки. Несмотря на это, кажется, что любое переданное свойство должно быть добавлено в коллекцию ViewData по умолчанию.
Мне действительно нужно перестать отвечать на мои собственные вопросы:(