asp.net-mvc - ASP.NET MVC 3.0 模型与基类和派生类绑定(bind)?

标签 asp.net-mvc class binding derived

大家好,我有一个名为 Vehicle 的基类,其中包含所有车辆共有的所有属性,并且我有多个名为 Car、Jeep 的派生类,它们派生自 Vehicle 并添加更多属性

前任:

    public class Vehicle
{
    public int Color { get; set; }
    public double Cost { get; set; }
}


public class Car : Vehicle
{
    public SelectListItem Option { get; set; }
}

我有一个 Page 类,其中有一个像这样的车辆列表
public class Page
{
    public List<Vehicle> vehicles { get; set; }
}

我的 View 是 Page 类的强类型,所以在我看来,我正在循环所有车辆以显示在这样的页面上,此代码在 @using(Html.BeginForm()) 内部,因此我们回发用户选择
    for(int i=0;i<Model.Vehicles.Count;i++)
{
    <div id="Question">
        @{
            @Html.EditorFor(m => m.Vehicle[i], VehicleConstants.GetTemplateName(Model.Questions[i]));
         }
    <br />
    </div>
 }

我为每种类型的车辆使用一个编辑器模板,因此调用 VehicleConstants.GetTemplateName 的函数仅返回要根据车辆类型使用的模板名称

这个模板只是简单的在car类或者Jeep类上写属性(Derived class + Base class)

我遇到的问题是,当表单被发回时,我只能访问 Controller 中基类车辆的属性,我无法获得子类汽车或吉普车的属性值。
        [HttpPost]
    public string ReadPost(Page page)
    {
    }

回发表单时自动绑定(bind)这些值的最佳方法是什么?

创建自定义活页夹类是我唯一的选择吗?有人可以为我提供一些示例代码来说明如何执行此操作吗?非常感谢任何帮助。

最佳答案

为此,您将不得不使用自定义模型绑定(bind)器。默认模型绑定(bind)器不知道要实例化哪种具体类型。您可以在每一行中包含一个隐藏字段,指示您的自定义模型绑定(bind)器将创建的具体类型。我有 shown this in action here .顺便注意一下,通过使用标准模板命名约定,您可以摆脱 for您正在使用的循环以及 VehicleConstants.GetTemplateName方法。

关于asp.net-mvc - ASP.NET MVC 3.0 模型与基类和派生类绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10456614/

相关文章:

asp.net-mvc - Mono 上的 ASP.NET MVC

c# - 更新数据库失败,错误为 0x80131904(找不到服务器)

php - PHP 是面向对象的吗?

html - css 中类的结构-建议?

jQuery every - 将 (this) 与类规范相结合

WCF 可能超出了我的响应大小

c# - ControlTemplate.Triggers 中具有多重绑定(bind)的 multidatatrigger

asp.net-mvc - 默认 MVC 项目中的两个 Web.Config 文件

c# - 使用 jQuery 自动完成外键

c# - 带格式字符串的 MvvMCross 绑定(bind)