目前,我只想使用HTTP POST将JSON发送到asp.net mvc2控制器。
由于JSON实际上是JSON对象的列表,每个对象都有不同的字段和长度,因此很难为我创建一个输入模型。
所以我想知道是否有一种方法可以在ASP.NET MVC2中无需模型/ ajax发布JSON到控制器?
目前,我只想使用HTTP POST将JSON发送到asp.net mvc2控制器。
由于JSON实际上是JSON对象的列表,每个对象都有不同的字段和长度,因此很难为我创建一个输入模型。
所以我想知道是否有一种方法可以在ASP.NET MVC2中无需模型/ ajax发布JSON到控制器?
在 @Brian 的答案基础上,我们已经完成了这个任务。请记住,这是Jquery 1.4.2版本。
这部分内容可以拆分并简化,但它使用回调而不是完整的发布。最初它用于实时过滤结果并将它们的第一页重新加载到同一区域。
首先,在页面上有一个按钮/链接/其他元素。这将调用JavaScript来构建JSON数据。
<input type="button" alt="Update" onclick="doStuff();" />
接下来,我们有doStuff()函数。在这种情况下,refinements是一个JSON对象的集合。
function doStuff() {
var refinements = GetRefinementSelections();
var profileId = '<%= Model.Profile.ProfileId %>';
var startDate = $('#SearchbyDateFrom').val();
var endDate = $('#SearchbyDateTo').val();
var jsonData = JSON.stringify(
{
"ProfileId" : profileId,
"RefinementGroups": refinements,
"StartDate": startDate,
"EndDate": endDate
});
$('#jsonData').val(jsonData);
$('#update-button').click();
}
接下来,我们有一个ajax表单,里面有一个隐藏字段,doStuff()函数将我们的数据放入其中。这也可以是一个普通的表单。
<% using (Ajax.BeginForm("MyAction", "MyController", new { },
new AjaxOptions { },
new { id = "filteredResultsForm" }))
{ %>
<input type="submit" id="update-button" style="display:none;" />
<%= Html.Hidden("jsonData")%>
<% } %>
所以,点击此按钮会调用回调函数到服务器。以下是我们在控制器中的操作。JsonSerializer是Newtonsoft.Json的一部分。
public ActionResult MyAction(string jsonData)
{
JsonSerializer serializer = new JsonSerializer();
StringReader sr = new StringReader(jsonData);
Newtonsoft.Json.JsonTextReader reader = new JsonTextReader(sr);
JsonRequest jsonRequest = (JsonRequest)serializer.Deserialize(reader, typeof(JsonRequest));
//do work with object
return View();
}
JsonRequest需要是一个类对象,并且所有属性、子类及其属性等都需要可序列化才能使此方法起作用。尽管返回的数据集是一个流动的json对象集合,但是没有实际看到数据长什么样子,我相信你可以设计一种支持数据的类结构。