视图模型中的MVC 4参数名称和继承

时间:2012-12-27 11:29:46

标签: c# asp.net-mvc asp.net-mvc-4 model-binding

我曾尝试搜索我的问题的解决方案,但我失败了......

我的Asp.NET MVC 4 Web应用程序中有这样的模型:

public class ModelBase
{
  public string PropertyOne { get; set; }
  public string PropertyTwo { get; set; }
}

public class InheritedModelOne : ModelBase
{
  public string PropertyThree { get; set; }
}

public class InheritedModelTwo : ModelBase
{
  public string PropertyFour { get; set; }
}

我的控制器中有两个动作:

public ActionResult ActionOne([ModelBinder(typeof(MyModelBinder))]ModelBase formData)
{
  ...
}

public ActionResult ActionTwo(InheritedModelTwo inheritedModelTwo)
{
  ...
}

我的问题是当我在ActionTwo的Action参数中使用名称'inheritedModelTwo'时,属性PropertyFour被正确绑定,但是当我在ActionTwo的Action参数中使用名称formData时,属性PropertyOne和PropertyTwo是正确绑定但PropertyFour。我想要做的是在发布表单时正确绑定我的ActionTwo方法的InheritedModelTwo参数的所有三个属性。

更多信息:

  1. 帖子来自同一个JQuery请求。
  2. 来自帖子的数据在两种情况下是相同的。
  3. 此问题中唯一的不同之处是我的ActionTwo的参数名称。
  4. 在ActionTwo的参数中添加一个不同的名称,只使用要绑定的ModelBase属性。
  5. 抱歉我的英语真糟糕。
  6. 韩国社交协会

1 个答案:

答案 0 :(得分:0)

如果我理解正确的话......

您要做的是:使用基础对象类型映射/绑定从基础对象继承的对象。

这不起作用,因为继承仅在一个方向上起作用。

..所以你必须将 InheritingModel TYPE作为参数类型。

public class ModelBase
{
    public string PropertyOne { get; set; }
    public string PropertyTwo { get; set; }
}

public class InheritedModelOne : ModelBase
{
    public string PropertyThree { get; set; }
}

public class testObject
{ 
    [HttpPost]
    public ActionResult ActionOne(ModelBase formData)
    {
        formData.PropertyOne = "";
        formData.PropertyTwo = "";

        // This is not accessible to ModelBase
        //modelBase.PropertyThree = "";

        return null;
    }
    [HttpPost]
    public ActionResult ActionOne(InheritedModelOne inheritedModelOne)
    {
        // these are from the Base
        inheritedModelOne.PropertyOne = "";
        inheritedModelOne.PropertyTwo = "";

        // This is accessible only in InheritingModel
        inheritedModelOne.PropertyThree = "";

        return null;
    }

}