在MVC6中创建自定义模型绑定器的正确方法是什么?

时间:2014-12-12 16:44:42

标签: asp.net-core asp.net-core-mvc

我正在尝试使用vNext项目和mvc 6来关注this article中的步骤。我一直在阅读代码here,但仍然有点不确定如何实现它。

有没有人有一个他们可以分享或指出我正确方向的工作示例?

我特别想知道如何注册自定义绑定器,以及自DefaultModelBinder后我将继承哪些类。

3 个答案:

答案 0 :(得分:5)

样本模型绑定器:https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNet.Mvc.Core/ModelBinding/CancellationTokenModelBinder.cs

如何在Startup.cs中注册活页夹

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddMvc().Configure<MvcOptions>(options => 
    { 
        options.ModelBinders.Add(typeof(MyModelBinder)); 
    });

答案 1 :(得分:1)

我发了一篇博文,其中包含模型中自动修剪字符串的示例。

博客帖子在这里http://hotzblog.com/asp-net-vnext-defaultmodelbinder-and-automatic-viewmodel-string-trim/

我注意到直接添加到模型粘合剂不会完全起作用,因为模型粘合剂按顺序使用。您必须先删除原始模型绑定器

  services.AddMvc().Configure(options =>
  {
       // Replace MutableObjectModelBinder with extended Trimmer version
       IModelBinder originalBinder = options.ModelBinders.FirstOrDefault(x=>x.GetType() == typeof(MutableObjectModelBinder));
       int binderIndex = options.ModelBinders.IndexOf(originalBinder);
       options.ModelBinders.Remove(originalBinder);
       options.ModelBinders.Insert(binderIndex, new TrimmingModelBinder());
   });

答案 2 :(得分:0)

这是我对MVC 6 RC1自定义Model Binder的实现,但我必须承认它还不完美。出于某种原因,getters的{​​{1}}在值绑定到它们之前就会受到影响,因此我们必须添加ViewModel个检查,这是蹩脚的...而且我是仍然在寻找解决方案,无论如何,这应该有助于一些: https://github.com/Serjster/IOCModelBinderExample

如果您碰巧找到解决方案,请随时提供帮助。