[英]ASP.net MVC3 View inheritance
我有一个例如我要在单个页面中渲染的车辆列表,但每种车辆类型具有不同的视图特征。
车辆
- VehicleId
- VehicleTypeId(汽车/船/卡车/等......)
- 说明
- ......
我想在我的主要AllVehiclesPage上
@foreach(var vehicle in Model) //where Model is a List<Vehicle> from AllVehicles
{
//Render proper View
//CarView(vehicle)
//BoatView(vehicle)
//TruckView(vehicle)
}
在每个视图中,它将根据车辆的不同呈现,IE车轮轮辋尺寸适用于汽车/卡车而不是船只等...
我已经在Stackoverflow上阅读了关于视图继承的一些其他问题,但它们似乎并不适用。
部分视图最好用吗? 我应该创建Usercontrols吗?
使用显示模板。 用以下代码行替换整个foreach循环:
@model IEnumerable<Vehicle>
...
@Html.DisplayForModel()
现在是有趣的部分。 您可以为要处理的每种类型定义显示模板:
~/Views/Shared/DisplayTemplates/Car.cshtml
~/Views/Shared/DisplayTemplates/Boat.cshtml
~/Views/Shared/DisplayTemplates/Truck.cshtml
每个模板都将强类型化为相应的具体类型。 所以这就是Html.DisplayForModel()
行会发生的事情:
IEnumerable<Vehicle>
~/Views/Shared/DisplayTemplates
文件夹中查找此类型的相应显示模板,并通过将此模板作为模型传递给当前元素来自动呈现它。 您会注意到这种模式中有趣的东西:我非常使用ASP.NET MVC这个词而不是.NET开发人员这个词。 这很漂亮,因为开发人员必须遵循的标准是遵循标准约定,然后ASP.NET MVC将为他完成工作,这样开发人员就不需要编写循环,如果条件并不需要写,那么需要重新发明轮子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.