1

我试图寻找解决问题的方法,但我失败了......

我的 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 是正确绑定的,但是属性四。我想要做的是在发布表单时正确绑定我的 ActionTwo 方法的 InheritedModelTwo 参数的所有三个属性。

更多信息:

  1. 该帖子来自同一个 JQuery 请求。
  2. 在这两种情况下,来自 post 的数据是相同的。
  3. 这个问题的唯一区别是我的 ActionTwo 的参数名称。
  4. 在 ActionTwo 的参数中输入不同的名称只会绑定 ModelBase 属性。
  5. 对不起我的英语真的很糟糕。

谢了。

4

1 回答 1

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;
    }

}
于 2013-03-22T14:51:10.860 回答