Asp.net 反序列化json表单字符串

Asp.net 反序列化json表单字符串,asp.net,json,jquery,asp.net-mvc-4,Asp.net,Json,Jquery,Asp.net Mvc 4,我有一个动态构建表单,buildt来自文本文件,所以我事先不知道变量的名称。我已将表单和值序列化为json字符串: "PersonId=aasd&Gender=Kvinna&Education=sd&RelativeDementia=Ja&Apoe4=Vet+ej& SystolicBT=asd&HypertoniaTreatment=Nej&FPColesterol=asd&PersonLength=asdas &Pers

我有一个动态构建表单,buildt来自文本文件,所以我事先不知道变量的名称。我已将表单和值序列化为json字符串:

"PersonId=aasd&Gender=Kvinna&Education=sd&RelativeDementia=Ja&Apoe4=Vet+ej&
SystolicBT=asd&HypertoniaTreatment=Nej&FPColesterol=asd&PersonLength=asdas
&PersonWeight=dasd&PersonBMI=asd&AbdominalCircumference=adsasd
&KnownDiabetesMellitus=Ja&HadTIAStroke=Ja
&KnownHeartDisease=Ja
&IsCurrentlySmoking=Ja&IsExperiencingStress=Nej
&KnownDepression=Ja%2C+tidigare+behandlad&PhysicallyActive=Ja" 
使用此方法:

$(document).on("click", "#btnsubmit", function() {
    $.ajax({
        url: "/Home/RiskScore",
        type: "post",
        data: { "testData": $("form").serialize() },
        success: function(result) {
        }
现在我想反序列化它,以便在下一页上显示每个值的值和名称。我尝试了很多不同的代码变体,但都没有成功。 希望你能帮忙


谢谢

您可以使用
序列化数组
方法以名称-值对的形式获取表单值:

var nameValues = $("form").serializeArray();
for(var i = 0; i < nameValues.length; i++){
    console.log(nameValues[i].name);
    console.log(nameValues[i].value);
}
var nameValues=$(“form”).serializeArray();
对于(var i=0;i
您可以使用
serializeArray
方法以名称-值对的形式获取表单值:

var nameValues = $("form").serializeArray();
for(var i = 0; i < nameValues.length; i++){
    console.log(nameValues[i].name);
    console.log(nameValues[i].value);
}
var nameValues=$(“form”).serializeArray();
对于(var i=0;i
您没有JSON数据,它是标准的URL编码符号。如果您想在服务器端访问它,您可以循环post数据。ASP.NET自动将此格式解析为
Request.Form
集合

foreach(string key in Request.Form.AllKeys)
    Response.Write(Request.Form[key]);
您还需要将AJAX更改为:

data: $("form").serialize(),

这是因为您不需要
testData
标识符,只需要原始POST数据作为
data
属性。

您没有JSON数据,它是标准的URL编码符号。如果您想在服务器端访问它,您可以循环post数据。ASP.NET自动将此格式解析为
Request.Form
集合

foreach(string key in Request.Form.AllKeys)
    Response.Write(Request.Form[key]);
您还需要将AJAX更改为:

data: $("form").serialize(),

这是因为您不需要
testData
标识符,您只需要原始POST数据作为
data
属性。

如果需要
data:$(“表单”).serialize(),
它应该可以作为任何其他表单数据使用。请查看我是否需要:$(文档)。在(“单击”,“btnsubmit”,function(){$.ajax({url:“/Home/RiskScore”,键入:“post”,数据:$(“form”).serialize(),success:function(result){}它将null发送到我的HomeControlleri如果您执行
数据:$(“form”).serialize(),
它应与任何其他表单数据一样可用。请查看我是否执行以下操作:$(文档)。在(“单击”,“提交”,函数(){$.ajax({url:/Home/RiskScore),键入:“post”,数据:$(“表单”).serialize(),成功:函数(结果){}它将null发送给我的homecontrollerSee my edit,您需要对ajax请求进行一个小的更改。当将数据从:data:{“testData”:$(“form”).serialize()}更改为:data:{$(“form”).serialize()}时,我得到了错误:(:预期)是的,有效:)所以现在我得到了密钥,.net自动知道密钥的值:)是的,所有的键和值都会自动解析到请求中。表单集合,这样,如果您不知道键,您可以像回答中那样循环它们。或者如果您知道键,您可以直接访问它们
Request.Form['PersonId']
Cool!非常感谢!)查看我的编辑,您需要对ajax请求进行一个小的更改。当将数据从:data:{“testData”:$(“form”).serialize()}更改为:data:{$(“form”).serialize()}时,我得到了错误:(:预期)是的,有效:)所以现在我得到了密钥,.net自动知道密钥的值:)是的,所有的键和值都会自动解析到请求中。表单集合,这样,如果您不知道键,您可以像回答中那样循环它们。或者如果您知道键,您可以直接访问它们
Request.Form['PersonId']
Cool!非常感谢!)