Asp.net mvc 如何使MVC在控制器中选择合适的动作
有人能给我解释一件事吗 我的控制器中有两种方法:Asp.net mvc 如何使MVC在控制器中选择合适的动作,asp.net-mvc,Asp.net Mvc,有人能给我解释一件事吗 我的控制器中有两种方法: public ActionResult AddPredefinedTicket(int customerId){…} 及 public ActionResult AddPredefinedTicket(int customerId,TicketTypes type,string additionalJsonParameters){…}(这里TicketTypes是enum) 我想用URL打个电话,比如 出于某种原因,我得到了一个例外:
public ActionResult AddPredefinedTicket(int customerId){…}
及
public ActionResult AddPredefinedTicket(int customerId,TicketTypes type,string additionalJsonParameters){…}(这里TicketTypes是enum)
我想用URL打个电话,比如
出于某种原因,我得到了一个例外:
控制器类型“TicketController”上操作“AddPredefinedTicket”的当前请求在以下操作方法之间不明确:
System.Web.Mvc.ActionResult在CallCenter.CustomerService.Controllers.TicketController类型上添加预定义的票证(Int32)
System.Web.Mvc.ActionResult在CallCenter.CustomerService.Controllers.TicketController类型上添加预定义的票证(Int32,CallCenter.CustomerService.Data.Models.TicketTypes,System.String)
但是,我不明白为什么MVC认为这个请求模棱两可。
从我的URL调用中可以看出,我既没有传递“type”参数,也没有传递“additionalJsonParameters”参数。
我理解,additionalJsonParameters是字符串,所以它可以为null
但该操作也有“type”参数,即enum,不能为null
在我看来,MVC应该使用第一个动作,但它没有
你能解释一下原因吗?你不能让ActionResults过载 控制器操作必须满足一些附加要求。用作控制器操作的方法不能重载。此外,控制器操作不能是静态方法。除此之外,您几乎可以将任何方法用作控制器操作
请参阅:是否忘记用[HttpGet]、[HttpPost]属性装饰方法。将第一个方法的逻辑放在第二个方法中 在那里放一张支票,就像
if(type==null && string.IsNullOrEmpty(additionalJsonParameters){
//do logic from method 1
}
else{
//do logic from method 2
}
这是一个重复的好,我需要两个动作作为得到操作谢谢,现在我看到这是不可能的。但是,我仍然想知道,为什么这个案例没有在MVC中实现?你不知道为什么MVC有这样的限制吗?是的,这是一个选择。但我真的很讨厌控制器中的这种if/then逻辑。对我来说,使用不同的动作名称会更好