zoukankan      html  css  js  c++  java
  • [DotNet]利用反射自动将Web前台传递的数据初始化到对象中

      Web程序的前后台数据传递一直比较繁琐,最简单的方式可能是form提交后台提取信息进行判断。用 Python 开发习惯了Dict 格式参数的方便。最近帮朋友处理一个 DotNet 程序的时候,突然感觉这些数据传递处理别扭了。前台传递过来的数据后台需要一个个的对应到ORM对象中,实在是太麻烦了。

      有没有更好更方便的方式呢? 于是有了下面的思路。

      假设做一个约束,将Web Html中元素的ID 、 Name和后台对象字段名一至, 然后利用DotNet反射提取对象字段值和
    Form提交来的名称对应赋值,就自动完成了对象数据的初始化。
    代码测试一下,还是挺好用的 呵呵,如果处于安全考虑,Web Form提前可以用js进行数据校验,后台赋值时也可以跟
    据数据类型进行校验,同样可以DoubleCheck 呵呵。。。

    示例代码

    HTML部分

            <form id="form1" name="form1">
    <table border="1" cellspacing="0" cellpadding="0" class="addlm">
    <tr id="first">
    <td colspan="5" class="thead boldblue">添加权限</td>
    </tr>
    <tr>
    <td>权限名称:</td>
    <td><input id="Name" name="Name" type="text" class="onelinetext" value=""

    /></td>
    </tr>
    <tr>
    <td>&nbsp;</td>
    <td>
    <input id="btnCreate" type="button" class="bgsubmit" value="确定"/>
    </td>
    </tr>
    </table>
    </form>

    JS部分

    /// 创建栏目
    function CreatePermission() {

    var validate = new Validate().validate(
    {
    Name: { min:
    1, message: "名称不能为空!" }
    });

    if (validate) {
    var per = new Permission();
    per.create($(
    "#form1").serializeArray());
    }
    }


    --------------

    // 创建
    prototype.create = function(permission, callback) {

    $.post(
    "/Permission/DoCreatePermission", permission,
    function(data) {
    if (data == "Success")
    {
    alert(
    "创建成功!");
    }
    else {
    alert(
    "创建失败!");
    }
    if (!isUndefinedOrNull(callback)) callback(data.Result);
    if (data == "Success") TextBoxAllClear();
    });
    };

    DotNet部分

    var per = this.GetArguments(new Permission(), this.Request.Form); // 调用

    // 示例

    /// <summary>
    /// 获取参数值
    /// </summary>
    /// <param name="key"></param>
    /// <returns></returns>
    protected T GetArguments<T>(T t, System.Collections.Specialized.NameValueCollection form)
    {
    // 提取所有Key值,并转化成小写
    List<string> keys = new List<string>();
    foreach (var k in form.AllKeys)
    {
    keys.Add(k.ToLower());
    }

    // 构造实例类型,并设置属性值
    foreach (PropertyInfo pi in t.GetType().GetProperties())
    {
    if (keys.Contains(pi.Name.ToLower()))
    {
    var value
    = Convert.ChangeType(form.Get(pi.Name), pi.PropertyType);
    pi.SetValue(t, value,
    null);
    }
    }

    return t;
    }
  • 相关阅读:
    Auto.js常用控件整理
    python对接口sign签名操作
    # 859.亲密字符串
    linux系统如何挂载FTP共享文件
    解决“Tomcat控制台输出乱码问题”
    关于“Unknown or unsupported command 'install'”问题解决的小结
    输出九九乘法表
    python webdriver混合驱动测试框架(数据驱动+关键字驱动)
    python webdriver关键字框架
    python webdriver测试框架--数据驱动DB驱动
  • 原文地址:https://www.cnblogs.com/abeen/p/2108427.html
Copyright © 2011-2022 走看看