1

我正在尝试使用我遇到的一种看起来很干净的技术。

以前,我的 Partial 里面有循环。我在 Partial 中循环模式...但后来我遇到了一个示例,其中foreach循环存在于主页中,而 partial 只是循环的核心。

他们是这样完成的:

<% 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。

4

2 回答 2

2

在部分“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 参数等的信息。

希望这对你有帮助。

于 2011-01-03T20:18:52.427 回答
0
@model IEnumerable<dynamic>

@foreach (dynamic m in Model)
{
     @Html.Partial(MVC.Lists.Messages.Views._SingleMessage, (object)m)
}
于 2013-05-17T21:01:19.243 回答