是MVC3中的foreach循环查看输出UI的唯一方法

时间:2011-12-08 17:28:41

标签: asp.net-mvc-3

我目前正在阅读MVC3教程。以IEnumerable绑定是这样做的:

@ModelType IEnumerable(Of Product)

@foreach (var p in Model) {
   <div class="item">
      <h3>@p.Name</h3>
      @p.Description
      <h4>@p.Price.ToString("c")</h4>
   </div>
}

这是唯一这样做吗?它有点古老的经典ASP做事方式。 [哆嗦]

我无法确定是什么困扰我,它可能只是从WebForms过渡的痛苦,其中代码隐藏是国王。

有人请放心我的恐惧。

3 个答案:

答案 0 :(得分:2)

它只是因为你有代码。 数据绑定在Web表单中做了什么?它为你提供了一些设置在代码背后的东西,它通常通过黑魔法在你的表示层中“神奇地”工作,并回调到xml标记中提到的各种方法。当你将'对象e'作为eventargs等传递时,你无法追踪正在做什么的事情。它很混乱。

上面的代码很干净。 Theres没有回调代码,你不必等待新版本的控件来修复未来的浏览器。

ASP将BUSINESS LOGIC混合到表示层中。您的上述代码仅为表示层,因此您的代码很好。

您可以使用WebGrid或Telerik的网格(或MVCContrib)来获得更好的显示效果和更多“绑定类似”的东西,或者您可以使用DisplayTemplates自定义此视图,这样您就可以只使用Html.DisplayFor()而无需使用此对象必须重复上述代码。

答案 1 :(得分:1)

我不确定这是唯一的方法。如果你坚持,你可以写一个HTML Helper,如果你真的想要在后面的代码中做。但是,您正在使用StringBuilder或其他一些编写HTML的粗略机制。

当我想在MVC中使用ASP.NET等效的Repeater时,我编写了一个for循环,我发现它更容易,也更灵活,特别是使用Razr语法。

答案 2 :(得分:1)

您可以使用Html.DisplayForModel的重载,该重载也接受用于显示IEnumerable(Of Product)的模板名称。那样你的观点就像是

@Html.DisplayForModel("ItemList")

这个程序有一个例子here。但是,由于您希望自定义可枚举序列的显示格式,在某些时候(在本例中,在“ItemList”显示模板内),您 将具有编写如上所述的代码。