【问题标题】:MVC View InheritanceMVC 视图继承
【发布时间】:2009-01-07 22:04:42
【问题描述】:

例如: 假设我想返回一个显示汽车列表的视图,还显示您所在地区的一部分经销商。这是两条不连贯的数据。

我的视图继承了如下汽车列表:

public partial class CarLot : ViewPage<List<Cars>>
{

}

现在我可以从 controller 返回 view,如下所示:

return View(Model.GetCars());

要呈现这个,我的标记应该如下所示:

<% foreach (Car myCar in ViewData.Model)
{some html here}
%>

这会处理汽车列表,但我的问题是,我如何处理经销商列表? view 是否支持多重继承,还是我必须再次点击 model 形成标记?我知道可以这样做,但不确定这是否是最佳做法。

【问题讨论】:

    标签: c# asp.net-mvc model-view-controller inheritance


    【解决方案1】:

    创建数据传输对象

    public class CarLotViewModel
    {
         public List<Car> Cars { get; set; }
         public List<Dealer> NearbyDealers { get; set; }
    }
    

    设置您的视图以使用视图模型:

    public partial class CarLot : ViewPage<CarLotViewModel>
    {    
    }
    

    然后在你的控制器中:

    var model = new CarLotViewModel();
    
    model.Cars = GetCars();
    model.NearbyDealers = GetDealers();
    
    return View(model);
    

    然后枚举视图中的每个集合:

    <% foreach (Car car in ViewData.Model.Cars) { %>
    ....
    <% foreach (Dealer dealer in ViewData.Model.NearbyDealers) { %>
    

    【讨论】:

    • is public partial class CarLot : ViewPage {} 等价于@model CarLotViewModel ?
    【解决方案2】:

    设置您的视图以使用视图模型:

    公共部分类 CarLot : 查看页面 { }

    MVC 1.0 中没有代码隐藏。如何设置视图以使用视图模型?

    【讨论】:

    • 这是一个 ASPX。代码隐藏是允许的,但不鼓励,因为它违反了分离控制器和视图的理想。
    • 好吧,我不使用后面的代码。但在 Preview 和 Beta 中,ViewPage 继承默认为页面背后的代码。现在,对于强类型视图,它出现在标记中。在 1.0 版中,它看起来像这样:页面标记中的 Inherits="System.Web.Mvc.ViewPage"。
    猜你喜欢
    • 2014-11-03
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多