Как сделать различие между маршрутами, размещаемыми в Asp.Net MVC? - PullRequest
0 голосов
/ 16 мая 2010

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

Можно ли указать системе маршрутизации, какое действие является релевантным, и если это так, как оно выполняется?

Ответы [ 3 ]

3 голосов
/ 16 мая 2010

Вы можете украсить его с помощью HttpGet HttpPost

Смотрите в разделе "Переопределение HTTP-метода"

http://www.asp.net/learn/whitepapers/what-is-new-in-aspnet-mvc

Вы также можете использовать атрибут ActionName. Смотрите под "ActionNameAttribute"

http://haacked.com/archive/2008/08/29/how-a-method-becomes-an-action.aspx

1 голос
/ 19 мая 2010

Вот как это делается

Упрощенный пример:

[HttpGet] // this attribute is't necessary when there are only 2 actions with the same name
public ActionResult Update(int id)
{
    return View(new Repository().GetProduct(id));
}

[HttpPost]
public ActionResult Update(int id, Product product)
{
    // handle POST data
    var repo = new Repository();
    repo.UpdateProduct(product);
    return RedirectToAction("List");
}

И если вам понадобятся два действия, которые будут иметь абсолютно одинаковую подпись (то же имя и точно такое же количество параметров одного типа), то в этом случае вам придется использовать другой атрибут, подобный этому :

public ActionResult SomeAction(int id)
{
    return View(new Repository().GetSomething(id));
}

[HttpPost]
[ActionName("SomeAction")]
public ActionResult SomeActionPost(int id)
{
    // handle POST data
    var repo = new Repository();
    repo.UpdateTimestamp(id);
    return View(repo.GetSomething(id));
}
1 голос
/ 16 мая 2010

Вы не можете перегружать действия контроллера , хотя, как сказал Радж, вы можете различать их, позволяя им отвечать на различные запросы (получать, отправлять и т. Д.).

Вы также можете найти это полезным: Как метод становится действием .

...