我编写了一个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。如果是这样,是否易于实施,还是不值得花时间?
答案 0 :(得分:2)
由于您尝试对每种方法执行GET
请求,因此无法执行此操作。 ASP.NET MVC操作选择器不知道要选择哪种方法。
如果它有意义并且您能够使用HttpGet
或HttpPost
属性来区分每种类型的HTTP请求的方法。在你的情况下听起来并不合理。
答案 1 :(得分:1)
您可以为动作重载分配不同的HTTP方法,如下所示:
[HttpGet]
public async Task<ActionResult> Index()
[HttpPost]
public async Task<ActionResult> Index(int? mapCompanyId)
然后,MVC运行时将能够根据请求HTTP方法选择适当的操作。
答案 2 :(得分:0)