.net的MVC中 控制器如何接收前端页面提交的序列化表单

雨欲语鱼 2015-12-31 11:46:21
有这么一个表单
<form>
<div>
<label>用户名:</label>
<div>
<input type="text" name="name">
</div>
</div>
<div>
<label>密码:</label>
<div>
<input type="text" name="pwd">
</div>
</div>
<div>
<label>电话:</label>
<div>
<input type="text" name="phone">
</div>
</div>
<div>
<a id="sub">提交</a>
</div>
</form>

在表单内输入值后,把这个表单序列化
 
var form1=$("form").serialize();
var form=$("form").serializeArray();
var json= $.toJSON(form);
console.log(form1)
console.log(form)
console.log(json)

输出结果如下


问题有三个:
1.如果后台接收的是$("form").serialize();这个方法序列化后的表单,因为它不是json格式,
 
JavaScriptSerializer ser = new JavaScriptSerializer();
IndexNews news1 = ser.Deserialize<IndexNews>(s);

用这个方法反序列化不了,请问有什么方法可以解决?
2.如果后台接收的是 var form=$("form").serializeArray();这个方法序列化后的表单。序列化后的格式是一个对象数组,请问该怎么接收这个数组?
3.如果后台接收的是 var json= $.toJSON(form);这个方法序列化后的表单,也是不能用用ser.Deserialize方法反序列化。
本人小白一枚,请各位大神帮忙解决下,不胜感激。
...全文
3642 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
雨欲语鱼 2015-12-31
  • 打赏
  • 举报
回复
引用 7 楼 hanjun0612 的回复:
上一下代码 通过刚才给你的链接。 我自己也写了下测试代码 前台

    @Html.TextBoxFor(item =>Model.name , new { Name = "[0].name" })
    @Html.TextBoxFor(item =>Model.value , new { Name = "[0].value" })    
    @Html.TextBoxFor(item =>Model.name , new { Name = "[1].name" })
    @Html.TextBoxFor(item =>Model.value , new { Name = "[1].value" })                   

        <input type="button" id="sub" value="提交"/>

<script>
    $('#sub').click(function () {
        var data = [{ "name": "1", "value": "1v" }, { "name": "2", "value": "2v" }, { "name": "3", "value": "3v" }];
        var _list = {};

//这里你可以使用循环,我将就一下。
        _list["us[0].name"] = data[0].name;
        _list["us[0].value"] = data[0].value;
        _list["us[1].name"] = data[1].name;
        _list["us[1].value"] = data[1].value;

        $.ajax({
            url: "/Test/Index",
            type: "post",
            data: _list,
            success: function (d) {
                alert(d);
            }
        });
    })
</script>
后台
[HttpPost]
        public ActionResult Index(List<UserInfo> us)
        {


            return Content(us[0].name);
        }
谢谢 我试了一下 这个方法可以的
正怒月神 版主 2015-12-31
  • 打赏
  • 举报
回复
上一下代码 通过刚才给你的链接。 我自己也写了下测试代码 前台

    @Html.TextBoxFor(item =>Model.name , new { Name = "[0].name" })
    @Html.TextBoxFor(item =>Model.value , new { Name = "[0].value" })    
    @Html.TextBoxFor(item =>Model.name , new { Name = "[1].name" })
    @Html.TextBoxFor(item =>Model.value , new { Name = "[1].value" })                   

        <input type="button" id="sub" value="提交"/>

<script>
    $('#sub').click(function () {
        var data = [{ "name": "1", "value": "1v" }, { "name": "2", "value": "2v" }, { "name": "3", "value": "3v" }];
        var _list = {};

//这里你可以使用循环,我将就一下。
        _list["us[0].name"] = data[0].name;
        _list["us[0].value"] = data[0].value;
        _list["us[1].name"] = data[1].name;
        _list["us[1].value"] = data[1].value;

        $.ajax({
            url: "/Test/Index",
            type: "post",
            data: _list,
            success: function (d) {
                alert(d);
            }
        });
    })
</script>
后台
[HttpPost]
        public ActionResult Index(List<UserInfo> us)
        {


            return Content(us[0].name);
        }
正怒月神 版主 2015-12-31
  • 打赏
  • 举报
回复
http://blog.csdn.net/lingxyd_0/article/details/10428785 能解决你的问题
雨欲语鱼 2015-12-31
  • 打赏
  • 举报
回复
引用 3 楼 zhouqinghe24 的回复:
而且 你序列化后已经不叫表单了. 只能叫自定义的js对象
请问自定义的js对象在后台如何接收呢
雨欲语鱼 2015-12-31
  • 打赏
  • 举报
回复
引用 1 楼 u013756007 的回复:
控制器直接用request.form获取值不就行吗,干嘛要在js中序列化在接收
我想提交表单的时候 有另外附加的参数 例如除了一个表单的信息外,还有字符串等数据传回后台
瑞卡哥哥 2015-12-31
  • 打赏
  • 举报
回复
而且 你序列化后已经不叫表单了. 只能叫自定义的js对象
瑞卡哥哥 2015-12-31
  • 打赏
  • 举报
回复
$("form").submit() 就可以了 为什么还要序列化呢?
1988525 2015-12-31
  • 打赏
  • 举报
回复
控制器直接用request.form获取值不就行吗,干嘛要在js中序列化在接收

62,057

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧