操作方法参数中的继承

本文关键字:继承 参数 操作方法 | 更新日期: 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);
            }
...