我目前正在阅读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过渡的痛苦,其中代码隐藏是国王。
有人请放心我的恐惧。
答案 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”显示模板内),您 将具有编写如上所述的代码。