模棱两可的行动方法

时间:2013-04-15 13:57:03

标签: asp.net-mvc asp.net-mvc-routing

对于我目前正在进行的项目,我目前有两个独立的用户实例(可能会在以后增加):CorporateCustomer和PrivateCustomer。 两者都继承自抽象类Customer。

要显示这些客户之间的差异,目前会创建2个不同的视图,这些视图由以下方式由同一个Action呈现:

[HttpGet]
public virtual ActionResult Edit()
    {
            if(User.IsCorporate)
                return View("EditCorporate", new CorporateCustomer());
            else
                return View("EditPrivate", new PrivateCustomer());
    }
[HttpPost]
public virtual ActionResult Edit(CorporateCustomer customer){...}
[HttpPost]
public virtual ActionResult Edit(PrivateCustomer customer){...}

只是为了显示信息,这就像一个魅力。每种类型的网址都是相同的,这正是我们的目标。

然而,在做一个帖子时,我只能指定一种类型,或冒险进入一个模糊的动作方法(当然这是有道理的)。

现在我的问题是:是否有任何优雅的方式来处理这两种不同的类型,同时仍保留一个网址?或者我注定要使基类非抽象并在Request.Form集合中查找值?

谢谢,如果有人能想出一个解决方案(或者直接指出我正在做的事情是愚蠢的,无法完成)

1 个答案:

答案 0 :(得分:2)

你可以拥有一个同时采用两种参数类型的Action。

然后,模型绑定器应该使用发布的任何数据填充它们,您可以找出Action方法中的哪个是正确的。

[HttpPost]
public virtual ActionResult Edit( CorporateCustomer c, PrivateCustomer p )
{
  ...
}