我曾尝试搜索我的问题的解决方案,但我失败了......
我的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参数的所有三个属性。
更多信息:
韩国社交协会
答案 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;
}
}