ASP.Net MVC ViewUserControl с контроллером, использующим MVC 1.0

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

  •  23-08-2019
  •  | 
  •  

Вопрос

Из-за путаницы между всей информацией о mvc из всех предварительных выпусков и одной официальной версии, я очень не понимаю, как обращаться с элементами управления viewuser.Итак, раз и навсегда скажите мне, как реализовать этот пример:

У меня есть список предстоящих событий, который необходимо отобразить на нескольких страницах моего сайта.Поэтому я поместил новый ViewUserControl (ListEvents.ascx) в свою папку Views\Shared.

Я прошу этот ListEvents.ascx отобразить в моем представлении Home/Index следующим образом:

<p>
    Here's a list of events:
    <% Html.RenderPartial("ListEvents");%>
</p>

Как мне передать мою модель этому элементу управления viewuser?Я знаю, что могу сделать это:

<p>
    Here's a list of events:
    <% Html.RenderPartial("ListEvents", (new Model.Services.EventService(null)).ListEvents());%>
</p>

Но это не кажется очень умным поступком — создавать новую модель изнутри представления?!Или я здесь ошибаюсь?Я даже не могу передать какое-либо состояние проверки, отсюда и нулевой параметр.Таким образом, альтернативный вариант — сохранить эти данные в элементе ViewData[], но мой элемент управления viewuser не должен зависеть от ViewData своего родителя!

Я уверен, что на этот вопрос есть очень простой ответ, поделитесь, пожалуйста, когда я закончу поиск в Интернете этой проблемы.

Спасибо!

Простой ответ:Пользовательский элемент управления view всегда должен получать свою модель из представления, в котором он находится.Обход этой проблемы, например добавление файла кода программной части в элемент управления viewuser, приведет к нарушению шаблона MVC.

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

Решение

По умолчанию будет использоваться та же модель, что и страница.Если вы хотите предоставить модель каждому экземпляру RenderPartial, ваша ситуация, вероятно, аналогична рендерингу нескольких записей в приложении блога.Вы можете получить каждую модель из коллекции в модели страницы и передать ее пользовательскому элементу управления следующим образом:

foreach (var post in Model.Entries) {
  Html.RenderPartial("PostTemplate", post);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top