MVC3动态列表视图

时间:2011-03-23 13:54:59

标签: c# asp.net-mvc-3 mvccontrib

在MVC3中,我已经能够依赖Html.DisplayForModel()为我的数据生成显示。使用这种方法和各种模板,我有一个View来显示我的几个模型。我想知道的是,有没有办法可以让我的模型列表?

例如,我有一个名为Networks的模型。我列出多个网络的观点如下:

@model PagedList<Network>

<div id="networkList">
@Html.Grid(Model).Columns(column => {
        column.For(x => Html.ActionLink(x.Id.ToString(), "NetworkDetails", new { id = x.Id })).Named("Network ID");
        column.For(x => x.Name);
        column.For(x => x.Enabled);
}).Attributes(Style => "text-align: center")

@Html.AjaxPager(Model, new PagerOptions() { PageIndexParameterName="page", ShowDisabledPagerItems = false, AlwaysShowFirstLastPageNumber=true },
                            new AjaxOptions() { UpdateTargetId = "networkList" })
</div>

我想知道在为我的模型生成列表时是否可以使用单个模板。我可以依赖属性来知道我想在列表中生成哪些属性,即:[ListItem]。

对我来说,头部刮擦是,如何将动态模型传递给扩展方法?如果有任何帮助,Html.Grid扩展名来自MVCContrib。有没有其他人做过类似的事情?依靠模板会很棒,因为它会真正削减代码量。

1 个答案:

答案 0 :(得分:0)

您可以使用以下内容为EditorFor()实现它(假设它可以采用模板名称参数,它可能类似于您的Grid扩展方法):

// in the main view
@Html.EditorFor(o => o.InvoiceId, "TemplateName", new { Property = "InvoiceId" })
@Html.EditorFor(o => o.Title, "TemplateName", new { Property = "Title" })

// in the template view
@model object
@{ var property = (string)this.ViewData["Property"]; }

或者,您只需传入模板名称并在模板中使用此代码

即可
var prefix = ViewData.TemplateInfo.HtmlFieldPrefix;
if (prefix.EndsWith("InvoiceId")) { ... }