如何通过路由值将JSON数组发送到操作方法(MVC 4)



我看过30多个问答;然而,关于发送json数组,我有一个不同且奇怪的问题。。。

我认为它通过jqgrid向用户表示一些数据。用户操纵其中的一些行,并调用一个操作方法来显示基于该数据的报告。我的问题是,我必须通过路由值发送该数组,并且我无法消除Bad Request - Invalid URL错误。。。

我的观点对应部分:

// ... some correct codes before
var bpics = [],           
    for (var i = 0; i < myData.length; i++) {
        var pid = "#chk" + myData[i].ID,
            sid = "#ddl" + myData[i].ID,
            pic = {
                PersonnelName: myData[i].PersonnelName,
                FatherName: myData[i].FatherName,
                BirthDate: myData[i].BirthDate,
                Education: myData[i].Education,
                UniversityName: myData[i].UniversityName,
                PostName: $(pid).val(),
                Phone: myData[i].Phone,                    
                NeedSettle: $(sid).val()
            };
        bpics.push(pic);
    }        
    window.open("../RawPrint/GetBurseLetterReport/" + JSON.stringify(bpics)
        + "/" + $("#txtDestManName").val()
        + "/" + $("#ddlUniversity").val()
        + "/" + $("#lblCourseTitle").text());
// ... some other correct codes after ...

事实上,我使用的是StimulSoft Reports,该组件指示开发人员通过路由值发送变量。所以,我很难通过路由值发送JSON字符串(因为我必须…!)

我做过的一些工作:

在web配置中,我添加了以下标签。然而,当我使用$.ajax发送json数组时,它的工作原理…:

<httpRuntime targetFramework="4.5" requestPathInvalidCharacters=""   requestValidationMode="2.0" />

<pages validateRequest="false">

有什么帮助、小费、窍门吗?!

JSON.stringfy(bpics)会产生类似的字符串

[{PersonnelName:"value",$FatherName:"value",出生日期:"value"、…},{Personnel Name:"value",$FatherName:"值"、出生日期:

所以实际的url格式是这样的window.open("../RawPrint/GetBurseLetterReport/[{PersonnelName: 'value',$FatherName: 'value',BirthDate: 'value',...},{PersonnelName: 'value',$FatherName: 'value',BirthDate: 'value',...},....]/destmanname/university/coursetitle")

在url中,您有特殊的charector":",这导致无效url(400错误请求)错误

您应该在末尾将数组值作为参数传递,如下所示http://yoururl?bpics=JSON.stringify(bpics);您可以在参数中传递任何文本,这样即使在参数中发送特殊的字符,也不会出现400错误。

在控制器内部写一些类似的东西

public ActionResult GetBurseLetterReport(YourClass[] bpics) { .... }

YourClass包含PersonalName、FatherName等所有属性。。public class YourClass { public string PersonalName{get;set;} .... .... }

相关内容

最新更新