2013-10-07 2 views
3

Внутри моего контроллера asp.net mvc4 У меня есть два метода действиянеоднозначных между двумя методами контроллера

public ActionResult Projects() 

и

public ActionResult Projects(string s) 

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

Почему это так, поскольку у них есть другая подпись метода?

+0

Возможный дубликат [ASP.NET MVC неоднозначные методы действия] (http://stackoverflow.com/questions/1045316/asp-net-mvc-ambiguous-action-methods) –

ответ

5

MVC он не может поддерживать два действия с тем же именем ... даже с разными подписями. Единственное исключение - когда одно из действий украшено другим атрибутом глагола, например [HttpPost].

Если HttpPost не подходит для вас ... вам нужно изменить название действия.

Просто проверка вокруг, есть несколько вариантов, которые помогут вам иметь 2 действия с тем же именем: https://stackoverflow.com/a/1045616/7720

+0

Обычно я решаю это путем маршрутизации. Вы можете использовать стандартную маршрутизацию, чтобы исправить ее, переместив их на разные контроллеры, или вы можете использовать материал от attributerouting.net. Вы всегда можете дать им разные имена конечно –

+0

Я не большой поклонник маршрутизации ... но вы правы. В моем проекте у нас есть 60 контроллеров, которые всегда используют стандартный маршрут. – Romias

4

Украсьте их с глаголами, они имеют разные функции подписи, но самое важное они имеют тот же ActionName

[HttpGet] 
public ActionResult Projects() 


[HttpPost] 
public ActionResult Projects(string s) 

или изменить имя действия одного из них mehod

1

струна nullable type.

Таким образом, ваш маршрут будет соответствовать обоим методам для optional.

В вашем случае ниже действительны

/Главная/Проекты/

/Главная/Проекты/Бизнес/

Так украсьте другим именем

public ActionResult ProjectBySting(string s) 

или глагол, как [HttpPost]/[HttpGet]

Смежные вопросы