在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。有没有其他人做过类似的事情?依靠模板会很棒,因为它会真正削减代码量。
答案 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")) { ... }