操作方法参数中的继承
本文关键字:继承 参数 操作方法 | 更新日期: 2023-09-27 17:55:49
我有以下类:
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视图,它有两个HTML表单。这些窗体调用相同的操作方法。此操作方法应接收两个SomethingBase
类派生中的任何一个。但是,如果我创建像 SomethingBase param
这样的单个参数,则仅接收SharedProperty
。这种行为可以用 ASP.NET MVC的绑定机制来解释。
为了使我的操作方法起作用,我创建了下一个定义:
public ActionResult(ChildClassOne param1, ChildClassTwo param2)
SharedProperty
转到两个参数,但仅针对对象填充特定属性,该对象实际上是从视图中传递的。它有效,但我认为这不是唯一的解决方案。
对于这种情况,是否有一些最佳实践解决方案?
您应该为每个操作创建一个视图模型,因为它们并不相同。在这种情况下,真的没有理由尝试使用基类。
Controller
类的方法TryUpdateModel
使其工作。但是,这种方式不是很优雅。
...
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);
}
...