如何使用dom构造插入带有查询字符串的iframe并读取控制器中的请求



我正在尝试使用get请求中的查询字符串将自定义类型的数组发送回MVC控制器。我的型号如下:

public class SectionViewModel
{
public string Building { get; set; }
public int Number { get; set; }
}

我的dojo looks发布方法如下所示:

xhr.get({
url: '/Admin/Manage/CreateReport',
content: { 'schedules': JSON.stringify([
{
Building: 'test',
Number: 123
},
{
Building: 'asdf',
Number: 321
}])
},
headers: { 'Content-Type': 'application/json; charset=utf-8' },
dataType: "json",
load: function (data) { }
});

我的控制器如下:

[HttpGet]
public ActionResult CreateReport(List<SectionViewModel> schedules)
{
return null;
}

控制器方法中的变量计划是一个空列表,在调试时为非空。我尝试了很多不同的组合来形成内容,但我被卡住了。我不知道如何以我的控制器会接受的方式构建内容。任何帮助都将不胜感激!

解决方案:

get请求是必需的。我使用domContract将源代码设置为查询字符串的iframe注入。控制器方法解析get内容,并根据结果生成电子表格。所以最后的代码看起来是这样的:

iframe代码:

domConstruct.create("iframe", {
src: '/Admin/Manage/Test?test=' + JSON.stringify(model),
style: 'display: none;',
}, dojo.doc.body);

型号代码:

public class SectionViewModel
{
public string Building { get; set; }
public int Number { get; set; }
public string Time { get; set; }
public string Professor { get; set; }
public List<User> Students { get; set; }
}

控制器代码:

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Test(string test)
{
JavaScriptSerializer jSerial = new JavaScriptSerializer();
var result = jSerial.Deserialize<List<SectionViewModel>>(test); 
return null;
}

这感觉有点粗鲁,但它完成了任务。我被这个问题困扰了好几个小时。如果这可以在不使用JavascriptDeserializer的情况下完成,请告诉我!

内容应如下所示

content:  JSON.stringify([
{
Building: 'test',
Number: 123
},
{
Building: 'asdf',
Number: 321
}]),

然后将xhr.get更改为xhr-post然后在Web.Api 中将HttpPost添加到您的操作中

记住

GET-从指定资源请求数据

/test/demo_form.asp?name1=value1&name2=value2

POST-将要处理的数据提交到指定的资源

POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2

更多信息

最新更新