Как заставить MVC выбрать правильное действие в контроллере - PullRequest
2 голосов
/ 31 марта 2010

Может кто-нибудь объяснить мне одну вещь.

У меня есть два метода в моем контроллере:

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

и

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

Я пытаюсь позвонить с использованием URL, например

<a href="http://.../Ticket/AddPredefinedTicket?customerId=1082" rel="nofollow noreferrer">http://.../Ticket/AddPredefinedTicket?customerId=1082</a>

По какой-то причине я получил исключение:

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». Я понимаю, что дополнительные JsonParameters - это строка, поэтому она может быть нулевой.

Но у действия также есть параметр "type", то есть enum, и он не может быть нулевым.

По моему мнению, MVC должен использовать первое действие, но это не так.

Можете ли вы объяснить, почему?

Ответы [ 3 ]

1 голос
/ 31 марта 2010

Вы забыли украсить свои методы атрибутами [HttpGet], [HttpPost].

0 голосов
/ 31 марта 2010

Поместите логику из первого метода во второй метод.

Поставь там чек, как

if(type==null && string.IsNullOrEmpty(additionalJsonParameters){
//do logic from method 1
}
else{
//do logic from method 2
}
0 голосов
/ 31 марта 2010

вы не можете перегрузить ваши ActionResults.

" Существуют некоторые дополнительные требования, которым должно удовлетворять действие контроллера. Метод, используемый в качестве действия контроллера, не может быть перегружен. Кроме того, действие контроллера не может быть статическим методом. Кроме этого, вы можете использовать практически любой метод в качестве действия контроллера."

См .: http://www.asp.net/Learn/mvc/tutorial-03-cs.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...