如何覆盖特定post post mvc5的全局ModelBinder

时间:2017-07-28 17:12:57

标签: c# asp.net-mvc asp.net-mvc-5 model-binding

我已为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());

现在我想在特定的帖子操作中忽略这个模型绑定器并使用默认绑定。

我的ViewModel

public class AddListViewModel
{
    public string[] SelectedNames { get; set; }
    public int[] SelectedList { get; set; }
}

我的行动:

[HttpPost]
public JsonResult AddInList(AddListViewModel vm)
{
    //  code here
}

SelectedList的结果始终为空。绑定不起作用。如果我禁用全局自定义绑定,那么绑定工作正常。

我尝试将DefaultModelBinder指定为如下,但没有成功

[HttpPost]
public JsonResult AddCompaniesInList(
    [ModelBinder(typeof(DefaultModelBinder))]AddListViewModel vm)
{}

我甚至创建了另一个自定义默认活页夹来添加操作。但似乎默认绑定器会覆盖我的动作绑定器,结果始终为空。

如何忽略特定操作的默认全局绑定?

0 个答案:

没有答案