代码之家  ›  专栏  ›  技术社区  ›  user469652

不带模型和Ajax的POST-Json

  •  4
  • user469652  · 技术社区  · 15 年前

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

    因为JSON实际上是JSON对象的列表,而且每个对象都有不同的字段和长度,所以我很难组成一个输入模型。

    所以我想知道有没有一种方法可以将不带model/ajax的JSON发布到ASP.NET MVC2中的控制器?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Josh    15 年前

    基于@Brian的回答,我们确实做到了这一点。记住这是Jquery 1.4.2

    这是一个小部分,可以简化,但它是使用回调,而不是全面的职位。它最初用于实时过滤结果并将结果的第一页重新加载回同一区域。

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

    <input type="button" alt="Update" onclick="doStuff();" />
    

    然后,我们得到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()将数据放入的隐藏字段。这可能也是一个常规的旧形式。

    <% 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对象的集合),并且没有看到数据的实际样子,但我相当肯定您可以设计某种类结构来支持您的数据。

        2
  •  1
  •   Brian Mains    15 年前

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

    哦。

    推荐文章