Сведения о вопросе

Kirushaa

22:19, 19th August, 2020

Теги

Asp.net MVC User Control ViewData

Просмотров: 415   Ответов: 2

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



  Сведения об ответе

LAST

00:34, 22nd August, 2020

Метод

ViewData.Eval("DisplayMessage") 

это должно работать на тебя.


  Сведения об ответе

ASER

08:07, 23rd August, 2020

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

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

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться