Это нормальное поведение.
Назначение атрибута ActionName
, по-видимому, предназначено для сценариев, в которых вы можете получить 2 идентичных действия, которые отличаются только с точки зрения запросов, которые они обрабатывают. Если в результате вы получите такие действия, компилятор выдаст сообщение об ошибке:
Тип YourController уже определяет члена с именем YourAction
с помощью
одинаковые типы параметров.
Я еще не видел, чтобы это происходило во многих сценариях, но в одном случае это происходит при удалении записей. Рассмотрим:
[HttpGet]
public ActionResult Delete(int id)
{
var model = repository.Find(id);
// Display a view to confirm if the user wants to delete this record.
return View(model);
}
[HttpPost]
public ActionResult Delete(int id)
{
repository.Delete(id);
return RedirectToAction("Index");
}
Оба метода принимают одинаковые типы параметров и имеют одинаковые имена. Хотя они украшены различными атрибутами HttpX
, этого недостаточно для того, чтобы компилятор различал их. Изменяя имя действия POST и помечая его ActionName("Delete")
, он позволяет компилятору различать их. В итоге действия выглядят так:
[HttpGet]
public ActionResult Delete(int id)
{
var model = repository.Find(id);
// Display a view to confirm if the user wants to delete this record.
return View(model);
}
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id)
{
repository.Delete(id);
return RedirectToAction("Index");
}