2015-01-16 2 views
0

Я разработал макет 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)»

Почему это происходит ? Я не хочу изменять имя действия сервера и жесткий код разницы в мастере пользовательского интерфейса. Есть ли другой способ решить эту проблему?

+0

Вы можете реализовать пользовательские модели связующего –

+4

MVC не может различать между функциями исключительно на основе имен/типов параметров, давая вам два ActionMethods с тем же именем функции, таким образом, сообщение неоднозначного ошибкя. Он не знает, какой из них вы хотите. Либо вам нужно изменить одно из ваших имен ActionMethod, либо возиться с AttributeRouting - хотя я никогда не сталкивался с этим, а не на 100%, что он будет делать то, что вы хотите - http://blogs.msdn.com/b/webdev/archive/ 2013/10/17/атрибутов маршрутизации-в-Asp-нетто-MVC-5.aspx. – Tommy

+0

Атрибут [Bind] (http://msdn.microsoft.com/en-us/library/system.web.mvc.bindattribute%28v=vs.118%29.aspx), включающий все параметры и исключающий одна модель от другой? – Lorenzo

ответ

1

MVC поддерживает перегрузку метода на основе атрибутов, но он не будет использовать его исключительно на основе различных сигнатур методов. Вы можете посмотреть на для справки ASP.NET MVC ambiguous action methods

Смежные вопросы