Я разработал макет HTML-формы, который помогает создать объект для составления данных для отправки на сервер.Является ли это проблемой маршрутизации?
У меня есть контроллер с двумя методами действий следующим образом:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SaveItem(TypeOneItem model, int customerID) {
и
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SaveItem(TypeTwoItem model, int customerID) {
TypeOneItem и TypeTwoItem оба подкласс BaseItem. Класс определяется таким образом
public class BaseItem
{
public int ItemID { get; set; }
public string Name { get; set; }
}
public class TypeOneItem : BaseItem
{
public int Property1 { get; set; }
public string Property2 { get; set; }
}
public class TypeTwoItem : BaseItem
{
public string Property3 { get; set; }
public int Property4 { get; set; }
public double Property5 { get; set; }
}
Однако, даже если я отправляю правильные данные, которые будут переплетены только один из двух конкретных классов я получаю ошибку «The current request for action 'SaveItem' on controller type 'ManageController' is ambiguous between the following action methods: System.Web.Mvc.ActionResult SaveItem(TypeOneItem, Int32) System.Web.Mvc.ActionResult SaveItem(TypeTwoItem, Int32)
»
Почему это происходит ? Я не хочу изменять имя действия сервера и жесткий код разницы в мастере пользовательского интерфейса. Есть ли другой способ решить эту проблему?
Вы можете реализовать пользовательские модели связующего –
MVC не может различать между функциями исключительно на основе имен/типов параметров, давая вам два ActionMethods с тем же именем функции, таким образом, сообщение неоднозначного ошибкя. Он не знает, какой из них вы хотите. Либо вам нужно изменить одно из ваших имен ActionMethod, либо возиться с AttributeRouting - хотя я никогда не сталкивался с этим, а не на 100%, что он будет делать то, что вы хотите - http://blogs.msdn.com/b/webdev/archive/ 2013/10/17/атрибутов маршрутизации-в-Asp-нетто-MVC-5.aspx. – Tommy
Атрибут [Bind] (http://msdn.microsoft.com/en-us/library/system.web.mvc.bindattribute%28v=vs.118%29.aspx), включающий все параметры и исключающий одна модель от другой? – Lorenzo