对于我目前正在进行的项目,我目前有两个独立的用户实例(可能会在以后增加):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集合中查找值?
谢谢,如果有人能想出一个解决方案(或者直接指出我正在做的事情是愚蠢的,无法完成)
答案 0 :(得分:2)
你可以拥有一个同时采用两种参数类型的Action。
然后,模型绑定器应该使用发布的任何数据填充它们,您可以找出Action方法中的哪个是正确的。
[HttpPost]
public virtual ActionResult Edit( CorporateCustomer c, PrivateCustomer p )
{
...
}