Asp.net Видовые данные пользовательского элемента управления MVC

StackOverflow https://stackoverflow.com/questions/18787

Вопрос

Когда контроллер отображает представление на основе модели, вы можете получить свойства из коллекции ViewData с помощью индексатора (т.е.ViewData["Свойство"]).Однако у меня есть общий пользовательский элемент управления, который я попытался вызвать, используя следующее:

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

Это было полезно?

Решение

Способ

ViewData.Eval("DisplayMessage") 

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top