2

我有以下课程:

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转到这两个参数,但仅为对象填充特定属性,该对象实际上是从视图中传递的。它有效,但我认为这不是唯一的解决方案。

是否有针对这种情况的最佳实践解决方案?

4

2 回答 2

1

您应该为每个动作创建一个视图模型,因为它们并不相同。在这种情况下,真的没有理由尝试使用基类。

于 2013-01-25T10:09:22.250 回答
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);
            }
...
于 2013-01-25T13:40:43.677 回答