我有以下课程:
class SomethingBase
{
public string SharedProperty { get; set; }
}
class ChildClassOne : SomethingBase
{
public string SpecificPropertyOne { get; set; }
}
class ChildClassTwo : SomethingBase
{
public string SpecificPropertyTwo { get; set; }
}
我有ASP.NET MVC View,它有两个HTML表单。这些表单调用相同的操作方法。
此操作方法应该接收两个SomethingBase
类派生中的任何一个。
但是,如果我创建单个参数,例如SomethingBase param
,则只会收到SharedProperty
。这种行为可以通过ASP.NET MVC的绑定机制来解释。
为了使我的动作方法有效,我创建了下一个定义:
public ActionResult(ChildClassOne param1, ChildClassTwo param2)
SharedProperty
转到两个参数,但仅为对象填充特定属性,该对象实际上是从视图传递的。它有效,但我不认为这是唯一的解决方案。
对于这种情况,是否有一些最佳实践解决方案?
答案 0 :(得分:1)
您应该为每个操作创建一个视图模型,因为它们不相同。在这种情况下,没有理由尝试使用基类。
答案 1 :(得分:0)
TryUpdateModel
类的方法Controller
使其有效。但是,这种方式并不是很优雅。
...
public ActionResult Save(FormCollection collection)
{
SomethingBase model = null;
if (collection.AllKeys.Contains("SpecificOne"))
{
model = new ChildOne();
TryUpdateModel<ChildOne>((ChildOne)model, collection);
}
else
{
model = new ChildTwo();
TryUpdateModel<ChildTwo>((ChildTwo)model, collection);
}
...