控制器中的MVC5模糊动作方法

时间:2014-07-23 04:08:59

标签: c# controller polymorphism asp.net-mvc-5 actionresult

我编写了一个C#MVC5 Internet应用程序,并且在同一个控制器中有两个ActionResult方法的问题。

我有两个Index ActionResult方法如下:

public async Task<ActionResult> Index()

public async Task<ActionResult> Index(int? mapCompanyId)

我想要浏览到Index()方法或Index(int?mapCompanyId)方法,具体取决于是否为mapCompanyId指定了值。

目前,我收到此错误:

The current request for action 'Index' on controller type 'MapLocationController' is ambiguous between the following action methods:
System.Threading.Tasks.Task`1[System.Web.Mvc.ActionResult] Index() on type CanFindLocation.Controllers.MapLocationController
System.Threading.Tasks.Task`1[System.Web.Mvc.ActionResult] Index(System.Nullable`1[System.Int32]) on type CanFindLocation.Controllers.MapLocationController

我可以重写我的代码,这样只有一个Index ActionResult,但如果可能的话,宁愿有两个。

是否可以有两个具有相同名称的ActionResults,并且根据是否指定了值,执行相关的ActionResult。如果是这样,是否易于实施,还是不值得花时间?

3 个答案:

答案 0 :(得分:2)

由于您尝试对每种方法执行GET请求,因此无法执行此操作。 ASP.NET MVC操作选择器不知道要选择哪种方法。

如果它有意义并且您能够使用HttpGetHttpPost属性来区分每种类型的HTTP请求的方法。在你的情况下听起来并不合理。

答案 1 :(得分:1)

您可以为动作重载分配不同的HTTP方法,如下所示:

[HttpGet]
public async Task<ActionResult> Index()

[HttpPost]
public async Task<ActionResult> Index(int? mapCompanyId)
然后,MVC运行时将能够根据请求HTTP方法选择适当的操作。

答案 2 :(得分:0)