这是路由问题吗?

时间:2015-01-16 14:23:31

标签: c# asp.net asp.net-mvc inheritance asp.net-mvc-5.2

我开发了一个HTML表单向导,可以帮助创建一个对象组成要发送到服务器的数据。

我有一个控制器,有两种操作方法如下:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SaveItem( TypeOneItem model, int customerID ) {

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SaveItem( TypeTwoItem model, int customerID ) {

TypeOneItem和TypeTwoItem都是BaseItem的子类。该类以这种方式定义

public class BaseItem 
{
    public int ItemID { get; set; }
    public string Name { get; set; }
}

public class TypeOneItem : BaseItem
{
    public int Property1 { get; set; }
    public string Property2 { get; set; }
}

public class TypeTwoItem : BaseItem
{
    public string Property3 { get; set; }
    public int Property4 { get; set; }
    public double Property5 { get; set; }
}

但是,即使我将正确的数据发布到两个具体类中的一个,我也会收到错误 “The current request for action 'SaveItem' on controller type 'ManageController' is ambiguous between the following action methods: System.Web.Mvc.ActionResult SaveItem(TypeOneItem, Int32) System.Web.Mvc.ActionResult SaveItem(TypeTwoItem, Int32)

为什么会这样?我不想更改服务器操作名称和硬编码UI向导的差异。有没有其他方法可以解决这个问题?

1 个答案:

答案 0 :(得分:1)

MVC支持基于属性的方法重载,但它不会仅基于不同的方法签名来完成。 你可以参考一下 ASP.NET MVC ambiguous action methods