• ASP.NET MVC IModelBinder应用


    ASP.NET MVC5  暂时找到这种全局性的解决方案   参考 MVC项目开发中那些用到的知识点(MVC IModelBinder)

    事情的起因

    利用jQuery $.ajax作POST提交, 对发送参数在B端做了 escape(item.value.HTMLEncode()) ,所以在C端对接收到参数要做 UrlDecode();  势必在action接收modle时有大量的重复性冗余代码,如下面

    public string Create(tbiz_movieEntity movie)
    {
        if (ModelState.IsValid)
        {
            tbiz_movieBLL movieBLL = new tbiz_movieBLL();
            movie.MovieFileName = movie.MovieFileName.UrlDecode(); //HttpUtility.HtmlDecode(movie.MovieFileName);
            movie.MovieName = movie.MovieName.UrlDecode();
            movie.CreateTime = DateTime.Now;
            movieBLL.Addtbiz_movieEntity(movie);

    使用自定义IModelBinder类进行解决

    ModelsCustomBinder.cs
    public class CustomBinder : IModelBinder
    {
        public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            object obj = Activator.CreateInstance(bindingContext.ModelType);
            foreach (PropertyInfo p in bindingContext.ModelType.GetProperties())
            {
                ValueProviderResult vpResult = bindingContext.ValueProvider.GetValue(p.Name);
                if (vpResult != null)
                {
                    object value = vpResult.ConvertTo(p.PropertyType);
                    if (value.ToString().IndexOf("%") > -1 && value.GetType() == typeof(string))
                    {
                        object decodeVal = value.ToString().UrlDecode();
                        p.SetValue(obj, decodeVal, null);
                    }
                    else
                    {
                         p.SetValue(obj, value, null);
                    }
                    
                }
            }
            return obj;
        }
    }

    代码重构

    [HttpPost]
    public string Create([ModelBinder(typeof(CustomBinder))]tbiz_movieEntity movie)
  • 相关阅读:
    第30周日
    第30周六
    第30周五
    第30周四
    第30周三
    第30周二
    第30周一
    第29周日
    软件架构学习小结
    数据挖掘十大经典算法
  • 原文地址:https://www.cnblogs.com/zhuji/p/13902817.html
Copyright © 2020-2023  润新知