如何让MVC在控制器中选择适当的动作

时间:2010-03-31 12:45:50

标签: asp.net-mvc

有人可以解释一件事。

我的控制器中有两种方法:

public ActionResult AddPredefinedTicket(int customerId) {...}

public ActionResult AddPredefinedTicket(int customerId, TicketTypes type, string additionalJsonParameters) {...} (here TicketTypes is enum)

我想使用像

这样的网址拨打电话

http://.../Ticket/AddPredefinedTicket?customerId=1082

出于某种原因,我得到了一个例外:

The current request for action 'AddPredefinedTicket' on controller type 'TicketController' is ambiguous between the following action methods: System.Web.Mvc.ActionResult AddPredefinedTicket(Int32) on type CallCenter.CustomerService.Controllers.TicketController System.Web.Mvc.ActionResult AddPredefinedTicket(Int32, CallCenter.CustomerService.Data.Models.TicketTypes, System.String) on type CallCenter.CustomerService.Controllers.TicketController

但是,我不明白为什么MVC认为请求是模棱两可的。 从我的URL调用中可以看出,我没有传递'type'或'additionalJsonParameters'参数。 我明白,additionalJsonParameters是字符串,所以它可以为null。

但是该动作也有“type”参数,即enum,不能为null。

在我看来,MVC应该使用第一个动作,但事实并非如此。

你能解释一下原因吗?

3 个答案:

答案 0 :(得分:1)

您是否忘记使用[HttpGet],[HttpPost]属性修饰您的方法。

答案 1 :(得分:0)

你不能重载你的ActionResults。

控制器动作必须满足一些额外的要求。用作控制器动作的方法不能重载。此外,控制器动作不能是静态方法。除此之外,你可以使用几乎任何方法作为控制器动作。

请参阅:http://www.asp.net/Learn/mvc/tutorial-03-cs.aspx

答案 2 :(得分:0)

将第一种方法的逻辑放在第二种方法中。

在那里办理支票,如

if(type==null && string.IsNullOrEmpty(additionalJsonParameters){
//do logic from method 1
}
else{
//do logic from method 2
}