2008-09-06 2 views
1

У меня проблема с примерной маршрутизацией с предварительным просмотром 5 asp.net mvc.ASP.NET MVC Preview 5 ошибка в маршрутизации

В AccountController У меня есть 2 действия:

public ActionResult Delete() 
public ActionResult Delete(string username) 

При попытке искать счета/удалить или войти/удалить имя пользователя = Давиде ControllerActionInvoker бросает исключение о том, что Удалить запрос неоднозначен между моими буксирными действиями? методы.

Маршрут по умолчанию в global.asax не был изменен.

Не должно ли действие invoker понимать, что такое метод вызова в списке параметров?

Использование предварительного просмотра 4 У меня не было такой проблемы, выполняющей ту же операцию.

Любая идея?

ответ

3

Решение найдено!

С введением атрибута ActionNameAttribute теперь необходимо вручную отфильтровать этот метод для вызова в зависимости от запроса. Это делается с помощью ActionSelectionAttribute.

Полное объяснение: http://haacked.com/archive/2008/08/29/how-a-method-becomes-an-action.aspx

0

Я не могу точно сказать, почему это происходит. Но вы можете захотеть рассмотреть только действие Delete (string username) и удалить перегрузку без параметров.

Поскольку строка является нулевой, мое понимание заключается в том, что просто вызов Account/Delete вызывает действие с нулевым параметром имени пользователя, которое вы можете проверить в начале метода действия.

+0

Берко, это не то, что я хочу. Два метода действий выполняют разные действия. Тестирование параметров в начале методов - это действительно не правильный способ ... слишком грязный. Выясните что-то еще. Спасибо, все равно – 2008-09-06 11:33:18

0

То, что я хотел бы сделать это канавы пустой Delete(), и использовать только Delete (строка имя пользователя)

В вашем URL маршрутизации вы бы что-то похожее на "/{Контроллер}/{Действие}/{имя_пользователя}/"? Если у вас есть «/ {Controller}/{Action}/{Id} /", вам лучше удалить Delete (string id), и таким образом просто используя url для обработки этого «/ Account/Delete/davide /»,

при этом использовать маршрут по умолчанию, который должен быть чем-то вроде по умолчанию Идентификатор «»

Затем в методе Delete (строка ID) имеют:

public ActionResult Delete(string id) 
{ 
    if(string.IsNullOrEmpty(id)) return EmptyID(); 

    // Continue normal Delete method 
} 

public ActionResult EmptyID() 
{ 
    // The method you were going to have on a blank delete. 
} 

это или просто обернуть его в один метод на if if {} else {}

В любом случае, я бы просто пошел с e и выполняйте по умолчанию свое имя пользователя/id в своем маршруте пустой строки и обрабатывайте его таким образом.

Если вы хотите связаться со мной по следующему вопросу, что я имею в виду, или что-то в этом роде, напишите мне на andrew @ my domain на моей информационной странице.

Редактировать: Ах, в общем, что Берко сказал в любом случае, я не уверен, как Именованные атрибуты помогут - так что, пожалуйста, разместите комментарий здесь, детализируя его для других парней, которые найдут те же проблемы! :)

+0

Вы получили мою почту, как вы предложили? – 2008-09-17 11:45:05

0

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