ASP.NET MVC - переопределение действия с разными параметрами
У меня есть контроллер, который наследуется от базового контроллера. Оба имеют действие edit (post), которое принимает два аргумента:
На базовом контроллере:
[HttpPost]
public virtual ActionResult Edit(IdType id, FormCollection form)
И в производном контроллере:
[HttpPost]
public ActionResult Edit(int id, SomeViewModel viewModel)
Если я оставлю это так, я получу исключение, потому что есть неоднозначный вызов. Тем не менее, я не могу использовать override
на производном действии, потому что сигнатуры метода не совсем совпадают. Я могу здесь что-нибудь сделать?
2 ответа
В дополнение к ответу Developer Art, обходной путь будет:
оставьте базовый метод как есть, и в своем производном классе реализуйте базовый метод и аннотируйте его [NonAction]
[NonAction]
public override ActionResult Edit(IdType id, FormCollection form)
{
// do nothing or throw exception
}
[HttpPost]
public ActionResult Edit(int id, SomeViewModel viewModel)
{
// your implementation
}
Я бы связал это:
На базовом контроллере:
[HttpPost]
public virtual ActionResult Edit(IdType id, FormCollection form)
И в производном контроллере:
[HttpPost]
public virtual ActionResult Edit(IdType id, FormCollection form)
{
var newId = //some enum? transform
var boundModel = UpdateModel(new SomeViewModel(), form);
return Edit( newId, boundModel );
}
[HttpPost]
public ActionResult Edit(int id, SomeViewModel viewModel)
Я не проверял это, передача метода Post другому Post должна работать. Таким образом, могут быть последствия для безопасности.
Это все, что вам нужно сделать на базовом контроллере:
добавление виртуального ключевого слова
На производном контроллере:
добавление ключевого слова override