What is the correct way to create custom model binders in MVC6?

寵の児 提交于 2019-12-01 09:02:45

问题


I'm trying to follow the steps in this article using a vNext project and mvc 6. I've been reading through the code here but still a little unsure how to implement this.

Does anyone have a working example they could share or point me in the right direction?

I'm particularly wondering how to register the custom binder, and what classes I would inherit from since DefaultModelBinder is not available.


回答1:


Sample model binder: https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNet.Mvc.Core/ModelBinding/CancellationTokenModelBinder.cs

How to register the binder in Startup.cs

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



回答2:


I have made a blog post that contains sample of trimming strings automatically in the model.

Blog post is here http://hotzblog.com/asp-net-vnext-defaultmodelbinder-and-automatic-viewmodel-string-trim/

I noticed that adding directly to model binders won't work totally, because model binders are used in order. You will have to first remove the original model binder

  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());
   });



回答3:


This is my implementation of the MVC 6 RC1 custom Model Binder though I must admit that it's not perfect yet. For some reason the getters of the ViewModel are getting hit before the values are bound to them, so we have to add if (xID == 0) checks, which is lame... and I'm still looking for a solution, anyways, this should help out some: https://github.com/Serjster/IOCModelBinderExample

Feel free to contribute if you happen to find a solution.



来源:https://stackoverflow.com/questions/27448198/what-is-the-correct-way-to-create-custom-model-binders-in-mvc6

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!