控制器中的MVC5模糊动作方法
本文关键字:方法 模糊 MVC5 控制器 | 更新日期: 2023-09-27 18:14:31
我已经编写了一个c# MVC5互联网应用程序,并有一个关于两个ActionResult方法在同一个控制器的问题。
我有两个索引ActionResult方法如下:
public async Task<ActionResult> Index()
public async Task<ActionResult> Index(int? mapCompanyId)
我想浏览到索引()方法或索引(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
我可以重写我的代码,使只有一个索引ActionResult,但宁愿有两个,如果可能的话。
是否可能有两个具有相同名称的ActionResults,并且取决于是否指定了一个值,是否执行相关的ActionResult。如果是这样,它是否容易执行,还是不值得花时间?
这是不可能的,因为您试图为每个方法做一个GET
请求。ASP。. NET MVC动作选择器不知道选择哪个方法。
如果它是有意义的,你可以使用HttpGet
或HttpPost
属性来区分每种类型的HTTP请求的方法。这听起来不像是对你有意义。
您可以为动作重载分配不同的HTTP方法,如下所示:
[HttpGet]
public async Task<ActionResult> Index()
[HttpPost]
public async Task<ActionResult> Index(int? mapCompanyId)
MVC运行时将能够根据请求HTTP方法选择适当的操作。
您可以使用自定义操作方法选择器http://www.codeproject.com/Articles/291433/Custom-Action-Method-Selector-in-MVC
https://agileshoptalk.wordpress.com/2012/02/03/custom-action-method-overloading-in-mvc3/