Asp.net MVC Пользовательский контроль ViewData - PullRequest
6 голосов
/ 21 августа 2008

Когда контроллер отображает представление на основе модели, вы можете получить свойства из коллекции 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»?

Ответы [ 2 ]

6 голосов
/ 28 августа 2008

Способ

ViewData.Eval("DisplayMessage") 

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

2 голосов
/ 21 августа 2008

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

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

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

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

...