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 ответа

Решение

Метод

ViewData.Eval("DisplayMessage") 

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

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

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

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

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

Другие вопросы по тегам