• ASP.NET MVC ajax数组,模型绑定问题。


    当我们在做批量删除的时候,很多情况下,我们只拿到checkbox 的Value。把checkbox中的value放在一个Array中。然后ajax到MVC的控制器中。

    在ajax array的时候数据如下图:

    可以发现,因为新增了一对儿中括号,模型绑定就失败了,我们可以想到重写MVC的BindModel

    重写代码如下:

     public class JQueryBundler : DefaultModelBinder//这里要集成DefaultModelBinder
        {
            public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
            {
                if (bindingContext.ModelType.IsEnumerableType())
                {
                    var key = bindingContext.ModelName + "[]";
                    var valueResult = bindingContext.ValueProvider.GetValue(key);
                    if (valueResult != null && !string.IsNullOrEmpty(valueResult.AttemptedValue))
                    {
                        bindingContext.ModelName = key;
                    }
                }
                return base.BindModel(controllerContext, bindingContext);
            }
        }

    其中:IsEnumerableType()是System.Type的一个扩展方法.具体实现如下:

    /// <summary>
            /// 判断对象是否是Enumber类型的
            /// </summary>
            /// <param name="enumerableType"></param>
            /// <returns></returns>
            public static bool IsEnumerableType(this Type enumerableType)
            {
                return (FindGenericType(typeof(IEnumerable<>), enumerableType) != null);
            }
            public static Type FindGenericType(this Type definition, Type type)
            {
                while ((type != null) && (type != typeof(object)))
                {
                    if (type.IsGenericType && (type.GetGenericTypeDefinition() == definition))
                    {
                        return type;
                    }
                    if (definition.IsInterface)
                    {
                        foreach (Type type2 in type.GetInterfaces())
                        {
                            Type type3 = FindGenericType(definition, type2);
                            if (type3 != null)
                            {
                                return type3;
                            }
                        }
                    }
                    type = type.BaseType;
                }
                return null;
            }

    最后需要在:Global.asax中加入下面这句话在MVC启动的时候使用我们自定义的模型绑定:

    ModelBinders.Binders.DefaultBinder = new 你的模型绑定的类

    更新:

    MVC5中直接可以用数组接收:

    Public ActionResult Save(int[] Id)

    {

    ...Your code

      return View();

    }

  • 相关阅读:
    初识Mysql 连接器的收获(包含JDBC API最新文档)以及一些c++的有用技巧
    重拾 ”多项式“ 给我的启示
    vs2015下配置MySQL,使之能使用c++连接完美运行
    在CentOS上使用yum安装java
    CentOS 用yum安装中文输入法
    Redhat Linux RHEL5配置CentOS YUM更新源
    转:Linux下which、whereis、locate、find 命令的区别
    Centos 挂载NTFS格式的USB硬盘
    scp采用无密码在两台linux服务器之间传输数据
    转:Andriod studio技巧合集
  • 原文地址:https://www.cnblogs.com/jolab/p/5258207.html
Copyright © 2020-2023  润新知