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»?

20.08.2008 20:46:23
2 ОТВЕТА
РЕШЕНИЕ

Метод

ViewData.Eval("DisplayMessage") 

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

6
21.03.2013 05:57:19

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

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

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

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

2
20.08.2008 21:03:10