Я применил глобальный ModelBinder для массивов int, как показано ниже:
public class IntArrayModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (string.IsNullOrEmpty(value?.AttemptedValue))
{
return null;
}
try
{
return value
.AttemptedValue
.Split(',')
.Select(int.Parse)
.ToArray();
}
catch (Exception e)
{
Console.WriteLine(e);
return null;
}
}
}
Затем зарегистрируйте этот IntArrayModelBinder в файле global.asax.cs, как показано ниже
ModelBinders.Binders.Add(typeof(int[]), new IntArrayModelBinder());
Теперь я хочу игнорировать это связующее устройство в конкретном посту и использовать привязку по умолчанию.
My ViewModel
public class AddListViewModel
{
public string[] SelectedNames { get; set; }
public int[] SelectedList { get; set; }
}
И мое действие:
[HttpPost]
public JsonResult AddInList(AddListViewModel vm)
{
// code here
}
Но результат SelectedList всегда равен нулю. Связывание не работает. Если я отключу глобальную настраиваемую привязку, то привязка отлично работает.
Я пробовал, как показано ниже, но без успеха
[HttpPost]
public JsonResult AddCompaniesInList([ModelBinder(typeof(DefaultModelBinder))]AddListViewModel vm)
{}
Даже я создал другое настраиваемое по умолчанию связующее, чтобы добавить действие. Но по-прежнему кажется, что связующее значение по умолчанию переопределяет мое связующее действие, и результат всегда равен нулю.
Как я могу игнорировать глобальную привязку по умолчанию для определенного действия?
Спасибо,