【问题标题】:MVC3 Dynamic List ViewsMVC3 动态列表视图
【发布时间】:2011-03-23 13:54:58
【问题描述】:

在 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() 并保留一个模板来渲染网络模型。

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


【解决方案1】:

您可以使用以下方法为 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")) { ... }

【讨论】:

  • 天哪,我不得不回想一下这个问题,因为这是一个老问题。我从来没有真正找到我希望的解决方案,所以我最终得到了几个视图来处理我试图显示的每个数据列表。我不确定你的答案是否能抓住我真正追求的东西。问题是我不能将扩展方法用于未专门键入的内容。对于众所周知的类型,这很好,但我想看看我是否可以提出一种通用的方式来显示数据列表,而不是为每种类型提供单独的视图。
猜你喜欢
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 2016-09-30
  • 2013-07-06
  • 2011-05-01
相关资源
最近更新 更多