【问题标题】:POST Json without model and AjaxPOST Json 没有模型和 Ajax
【发布时间】:2010-11-23 13:39:06
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# asp.net jquery json asp.net-mvc-2


    【解决方案1】:

    基于@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】:

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

      HTH。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-04
        • 2018-06-04
        • 1970-01-01
        • 2020-08-03
        • 2010-10-09
        • 2018-12-13
        相关资源
        最近更新 更多