MVC3 动态列表视图

3
在MVC3中,我一直能够依赖Html.DisplayForModel()方法来生成我的数据的显示。使用此方法和各种模板,我有一个单独的视图来显示我的多个模型。但是我想知道的是,是否有一种方法可以在我的模型列表上工作呢?
例如,我有一个名为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。其他人是否做过类似的事情?依赖模板会很好,因为它会大大减少代码量。

不确定这是否有帮助 - 您可以使用@Html.EditorFor()来处理您的模型,并保留一个模板来呈现Network模型。 - HashCoder
1个回答

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")) { ... }

哎呀,我得回想一下这个问题,因为它是一个老问题了。我从来没有真正找到我希望的解决方案,所以最终我使用了几个视图来处理我试图显示的每个数据列表。但我不确定你的答案是否真正理解我当时的需求。问题在于,我无法为未经特定类型定义的内容使用扩展方法。对于众所周知的类型,这样做是可以的,但我试图看看是否能够想出一种通用的方式来显示数据列表,而不是为每种类型单独创建一个视图。 - Brosto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接