2009-04-03 1 views
4

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

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

Я прошу это ListEvents.ascx оказать на моем Home/Index зрения, как это:

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

Как бы идти о прохождении моей модели к этому ViewUserControl? Я знаю, что могу это сделать:

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

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

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

Спасибо!

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

ответ

2

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

foreach (var post in Model.Entries) { 
    Html.RenderPartial("PostTemplate", post); 
} 
+0

Да, но тогда модель моей ViewUserControl по-прежнему зависит от модели страницы она находится в И это точно чего я хочу избежать. – Peter

+0

Они фактически зависят от единственного свойства вашей модели, а не от самой модели. Две совершенно разные модели могут иметь одно и то же свойство. –

+0

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