POST Json没有模型和Ajax

现在,我只想使用HTTP POST将json发送到asp.net mvc2控制器。

由于JSON实际上是JSON对象的列表,并且每个JSON对象都有不同的字段和长度,因此我很难组成输入模型。

所以我想知道有没有办法让我将没有model / ajax的JSON发布到ASP.NET MVC2中的控制器?

在@ Brian的回答的基础上,我们完成了这个。 请记住这是Jquery 1.4.2

这有点突破,可以简化,但它在post上使用回调而不是完整。 它最初用于实时过滤结果并将它们的第一页重新加载回同一区域。

首先,我们在页面上有按钮/链接/任何内容。 这将调用javascript来构建json数据。

 

然后,我们有doStuff()函数。 在这种情况下,细化是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()将我们的数据放入其中。 这可能是一个常规的旧forms。

 <% using (Ajax.BeginForm("MyAction", "MyController", new { }, new AjaxOptions { }, new { id = "filteredResultsForm" })) { %>  <%= 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对象的集合),并且实际上没有看到数据的样子,但我相当确定您可以设计某种类结构来支持您的数据。

您可以将JSON存储在隐藏字段中,然后使用实用程序将JSON转换为控制器中的对象。 它必须在表单的发布数据中才能使其可用; 存储在隐藏字段中是一种方法,或使用AJAX将其流回。

HTH。