Разрешение неоднозначности
У меня есть контроллер с 3 перегрузками для метода create:
public ActionResult Create() {}
public ActionResult Create(string Skill, int ProductId) {}
public ActionResult Create(Skill Skill, Component Comp) {}
В одном из моих представлений я хочу создать эту вещь, поэтому я называю ее так:
<div id="X">
@Html.Action("Create")
</div>
Но я получаю ошибку:
Но так как{"текущий запрос на действие 'Create' по типу контроллера "XController" неоднозначен между следующими методами действия: Система.Сеть.В MVC.ActionResult Create () по типу Х. Веб.Контроллеры.Система XController.Сеть.В MVC.ActionResult созданная система.String, Int32) по типу Х. Веб.Контроллеры.XController Система.Сеть.В MVC.ActionResult Create (X. Web.Модели.Навык, Х. Веб.Модели.Компонент) по типу X. Web.Контроллеры.XController"}
Не передает никаких параметров, то следует использовать первую перегрузку. Это не кажется мне двусмысленным (что только означает, что я не думаю, как компилятор c#).
Может ли кто-нибудь указать на ошибку моих путей?2 ответа:
По умолчанию методы перегрузки не поддерживаются в ASP.NET MVC. Вы должны использовать различные действия или необязательные параметры. Например:
public ActionResult Create() {} public ActionResult Create(string Skill, int ProductId) {} public ActionResult Create(Skill Skill, Component Comp) {}
Изменится на:
// [HttpGet] by default public ActionResult Create() {} [HttpPost] public ActionResult Create(Skill skill, Component comp, string strSkill, int? productId) { if(skill == null && comp == null && !string.IsNullOrWhiteSpace(strSkill) && productId.HasValue) // do something... else if(skill != null && comp != null && string.IsNullOrWhiteSpace(strSkill) && !productId.HasValue) // do something else else // do the default action }
Или:
// [HttpGet] by default public ActionResult Create() {} [HttpPost] public ActionResult Create(string Skill, int ProductId) {} [HttpPost] public ActionResult CreateAnother(Skill Skill, Component Comp) {}
Или:
public ActionResult Create() {} [ActionName("CreateById")] public ActionResult Create(string Skill, int ProductId) {} [ActionName("CreateByObj")] public ActionResult Create(Skill Skill, Component Comp) {}