ASP.NET MVC 2: foreach, RenderPartial, ViewModel - PullRequest
1 голос
/ 03 января 2011

Я пытаюсь использовать технику, с которой я столкнулся, которая кажется достаточно чистой.

Раньше у моего Partial была петля внутри.Я перебирал режим в Частичном ... но затем я наткнулся на пример, где цикл foreach существовал на главной странице, в то время как частичное было просто основой цикла.

Они выполнилиэто примерно так:

<% int index = 1; // iteration
foreach (var item in Model.Deal) { %>

     <% Html.RenderPartial("DealList", item, new ViewDataDictionary {{ "index", index }}); %>

<% i++; // increase the interation
} %>

Но в моем примере я использую ViewModel, и теперь, когда я нахожусь в частичном, я не могу получить доступ к «элементу», как раньше,Вместо этого мой единственный вариант - Model.Deal ...

Какой смысл использовать «элемент» с помощью помощника RenderParial, если я не могу получить к нему доступ, сказав item.StoreName?Обратите внимание, что и View, и Partial строго типизированы в одну и ту же ViewDataModel.

Ответы [ 2 ]

2 голосов
/ 03 января 2011

Внутри частичного "DealList" ваша модель будет такой, какой item находится на главном экране.Внутри частичного представления Model.Deal относится к объекту Deal внутри item (из основного вида).

Это означает, что ваше свойство StoreName будет доступно как Model.StoreName в пределахваше частичное представление.

В качестве примечания я собрал метод расширения для обработки нескольких частичных представлений, чтобы не требовать зацикливания.

Новый метод называется RenderPartials:

public static void RenderPartials(this HtmlHelper helper, string partialViewName, IEnumerable models, string htmlFormat)
        {
            foreach (var view in models.Select(model =&gt; helper.Partial(partialViewName,model)))
            {
                helper.ViewContext.HttpContext.Response.Output.Write(htmlFormat, view.ToHtmlString());
            }
        }

Используя этот метод, вы можете просто сказать:

<% Html.RenderPartials("DealList",Model.Deal); %>

внутри вашего основного вида без цикла.

Есть еще немного информацииоб этом здесь , который объясняет больше о параметре htmlFormat и т. д.

Надеюсь, это полезно для вас.

0 голосов
/ 18 мая 2013
@model IEnumerable<dynamic>

@foreach (dynamic m in Model)
{
     @Html.Partial(MVC.Lists.Messages.Views._SingleMessage, (object)m)
}
...