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

时间:2013-07-18 15:54:01

标签: javascript asp.net-mvc json asp.net-mvc-4

我已经看过30多个Q&关于发送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字符串(因为我必须......!)。

我做过的一些作品:

在网络配置中,我添加了以下标签。但是当我使用$.ajax发送json数组时正常工作......:

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

<pages validateRequest="false">

任何帮助,提示,技巧,......?!

1 个答案:

答案 0 :(得分:2)

JSON.stringify(bpics)会产生一个像这样的字符串

[{PersonnelName:'value',$ FatherName:'value',BirthDate:'value',...},{PersonnelName:'value',$ FatherName:'value',BirthDate:'value',. ..},....]

所以实际的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); 您可以传递参数中的任何文本,这样即使您在参数中传递特殊的charectors,也不会出现400错误。

和内部控制器写这样的东西

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

YourClass包含所有属性,如PersonalName,FatherName .. public class YourClass { public string PersonalName{get;set;} .... .... }