Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何使MVC在控制器中选择合适的动作_Asp.net Mvc - Fatal编程技术网

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逻辑。对我来说,使用不同的动作名称会更好