mvc4强类型绑定提交form不想刷新页面的处理

自己日前做网站时遇到的问题,一个非常复杂的模型,点击提交按钮时不能提交而需要弹出一个确认的详细信息的对话框。因为该网页结构定义复杂,

若button类型不为submit就需要自己一个个获取对应的值,实在太麻烦;若为submit就需要将整个form提交,这样就要刷新页面,怎么都没法处理。

在网上也是自己查了很长时间,只因当时未保留有效的网址,不能给大家提供出处了,非常抱歉。现将做法告知其他有需要的朋友们。


1. VIEW和Model是强类型绑定,model又非常复杂,不想刷新页面

2.  html中描述input类型为button,并定义click函数 Form id 为testform

 <input type="button" id="testBtn" class="btn" value="test" οnclick="doclick()"/>

3. js中处理

function doclick() {
    var dataVo = $("#testform").serializeArray();       //转化为json对象
    var dataJson = convertToJson(dataVo);              //将表单转化成的json对象进行重新组织
    dataVo = JSON.stringify(dataJson);                    //将json对象转化为序列化为json字符串

    $.post("/test/test", dataVo,
    function (result) {
               alert("success");
        }
    });
}

/**
* 将表单对象转为json对象
* @param formValues
* @returns
*/
function convertToJson(formValues) {
    var result = {};
    for (var formValue, j = 0; j < formValues.length; j++) {
        formValue = formValues[j];
        var name = formValue.name;
        var value = formValue.value;
        if (name.indexOf('.') < 0) {
            result[name] = value;
            continue;
        } else {
            var simpleNames = name.split('.');
            // 构建命名空间
            var obj = result;
            for (var i = 0; i < simpleNames.length - 1; i++) {
                var simpleName = simpleNames[i];
                if (simpleName.indexOf('[') < 0) {
                    if (obj[simpleName] == null) {
                        obj[simpleName] = {};
                    }
                    obj = obj[simpleName];
                } else { // 数组
                    // 分隔
                    var arrNames = simpleName.split('[');
                    var arrName = arrNames[0];
                    var arrIndex = parseInt(arrNames[1]);
                    if (obj[arrName] == null) {
                        obj[arrName] = []; // new Array();
                    }
                    obj = obj[arrName];
                    multiChooseArray = result[arrName];
                    if (obj[arrIndex] == null) {
                        obj[arrIndex] = {}; // new Object();
                    }
                    obj = obj[arrIndex];
                }
            }

            if (obj[simpleNames[simpleNames.length - 1]]) {
                var temp = obj[simpleNames[simpleNames.length - 1]];
                obj[simpleNames[simpleNames.length - 1]] = temp;
            } else {
                obj[simpleNames[simpleNames.length - 1]] = value;
            }

        }
    }
    return result;
}

4. controller中需要先将json字符串返序列化为对应的model

    using System.Web.Script.Serialization;

         [HttpPost]
        public ActionResult test( )
        {
                var inputstream = HttpContext.Request.InputStream;
                string json = new StreamReader(inputstream).ReadToEnd();

                try
                {
                    JavaScriptSerializer js = new JavaScriptSerializer();
                    TestModel model = js.Deserialize<TestModel>(json);

                }

                catch (Exception e)
                {
                    System.Diagnostics.Debug.WriteLine(e.Message);
                }

    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值