ASP.NET MVC - переопределение действия с различными параметрами
У меня есть контроллер, который наследуется от базового контроллера. Оба имеют действие edit (post), которое принимает два аргумента:
На базовом контроллере:
[HttpPost]
public virtual ActionResult Edit(IdType id, FormCollection form)
И в производном контроллере:
[HttpPost]
public ActionResult Edit(int id, SomeViewModel viewModel)
Если я оставлю это, я получаю исключение, потому что есть неоднозначный вызов. Однако я не могу использовать override
для производного действия, потому что сигнатуры метода не точно совпадают. Могу ли я здесь что-нибудь сделать?
Ответы
Ответ 1
В качестве дополнения к дизайну разработчика ответ на этот вопрос будет следующим:
оставить базовый метод таким, какой он есть, и в вашем производном классе реализовать базовый метод и аннотировать его с помощью [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
}
Ответ 2
Я бы связал его:
На базовом контроллере:
[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 другому, должен работать. Таким образом могут быть последствия для безопасности.