【问题标题】:Ajax and MVC posting class object to controllerAjax 和 MVC 将类对象发布到控制器
【发布时间】:2013-02-22 04:21:41
【问题描述】:

我的问题:

首先,我有一个搜索表单,用户在其中输入条件并将请求发送到适当的控制器索引操作。用户输入作为我创建的模型类型传入,只是为了保存数据。我将模型返回到视图中,然后在呈现视图之前,我使用 jquery 获取视图模型数据,并且我有一个 knockout.js/ajax 将“数据”发布到一个 jsonresult 操作,其中发生搜索过滤然后我更新使用 json 数据和敲除数据绑定的视图。

我的 jsonresult 操作需要一个字符串 sortByText(works) 用于表排序和一个 ViewModel。但是当发生 ajax 调用时,我的 jsonresult 操作无法识别数据对象传递的值。

如何将“SearchFormModel”正确传递到 JSONresult 操作中?

AJAX

'self.options.formModel' 保存 Index 操作发送的我的数据;在调试时,我看到它有数据,但在下一步中没有发布到 jsonresult 操作,只有 sortByText。 ajax 'data:' 只能识别字符串和int吗?

     $.ajax({
        type: 'POST',
        url: Url,
        data: { sortByText: selectedText, formModel: self.options.formModel },
        dataType: "json"
      })....etc

控制器

    [HttpGet]     
    public ActionResult Index(string sortByText, SearchFormModel formModel)
    {
        var model = new SearchViewModel();
        model.FormModel = formModel;

        return View(model);
    }

    [HttpPost]
    public JsonResult GetData(string sortByText, SearchFormModel formModel)
    {

        //return jsonData
    }

【问题讨论】:

    标签: asp.net-mvc json jquery knockout.js


    【解决方案1】:

    使用 ko.toJS(self.options.formModel()) 将 observableArray 转换为 json 对象

    【讨论】:

      【解决方案2】:

      尝试使用:-

      $.ajax({
          type: 'POST',
          url: Url,
          data: ko.toJSON({ sortByText: selectedText, formModel: self.options.formModel }),
          dataType: "json"
        })
      

      其次,这听起来可能断章取义:-
      您的 SearchFormModel 有

      [JsonObject(MemberSerialization.OptIn)]
      public class SearchFormModel 
      {
      
          [JsonProperty("id")]
          public string Id{ get; set; }
      
      }
      

      或者您可以在模型类中包含 sortByText:-

      [JsonObject(MemberSerialization.OptIn)]
      public class SearchFormModel 
      {
      
          [JsonProperty("id")]
          public string Id{ get; set; }
          [JsonProperty("sortByText ")]
          public string SortByText { get; set; }
      
      }
      

      你的 AJAX 会是这样的:-

          $.ajax({
          type: 'POST',
          url: Url,
          data: ko.toJSON(self.options.formModel),
          dataType: "json"
        })
      

      希望我没有走错方向。

      【讨论】:

        【解决方案3】:

        有时您必须从序列化的 Form 对象中提取数据。我有a post about this 可用的代码。您正在寻找的部分大约在题为“POST 数据的问题”的一半。

        【讨论】:

          【解决方案4】:

          我最终传递了字符串和整数,而不是传递对象不起作用。

          【讨论】:

            猜你喜欢
            • 2021-11-07
            • 2014-03-01
            • 1970-01-01
            • 1970-01-01
            • 2011-11-26
            • 2013-07-03
            • 2017-02-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多