【问题标题】:Jquery.Ajax sending two arguments to POST apiJquery.Ajax 向 POST api 发送两个参数
【发布时间】:2014-08-05 14:30:57
【问题描述】:

我有一个看起来有点像这样的控制器方法:

[HttpPost]
        public HttpResponseMessage SaveFunc(ChangeRequest[] changeRequests, string comment)
        {
            //do stuff
        }

用户可以保存一组更改请求并添加评论。 ajax 调用看起来有点像这样:

$.ajax({
        dataType: "json",
        contentType: "application/json;charset=utf-8",
        url: Constants.appRoot + "/api/myapi/SaveFunc",
        type: "POST",
        data: ko.toJSON(self.changeRequests),
        success: function (response) {
            self.message("Saved!");
            successCallback();
        }

请注意,在这个 ajax 调用中,我没有包含评论。使用它,我怎样才能将注释作为 ajax 调用的参数包含在内?

【问题讨论】:

    标签: c# jquery ajax asp.net-mvc controller


    【解决方案1】:

    这个怎么样?

    $.ajax({
    dataType: "json",
    contentType: "application/json;charset=utf-8",
    url: Constants.appRoot + "/api/myapi/SaveFunc",
    type: "POST",
    data: JSON.stringify({changeRequest: self.changeRequests, comment: "mycomment"}),
    success: function (response) {
        self.message("Saved!");
        successCallback();
    }
    

    我没有 KO 的经验,但我认为它可以使用相同的原理:

    data: ko.toJSON({changeRequest: self.changeRequests, comment: "mycomment"}),
    

    【讨论】:

    • 您的答案与最终的结果非常接近。谢谢你的开始!我在下面发布了最后一个。
    【解决方案2】:

    您还可以 POST 回单个对象,其形状为:

    {
    ChangeRequest[] changeRequests;
    string comment;
    }
    

    【讨论】:

      【解决方案3】:

      马库斯的回答与最终的结果非常接近,但这是它的一个扩展:

      //comment() is a knockout observable passed in when this func is called
      
      $.ajax({
                  dataType: "json",
                  contentType: "application/json;charset=utf-8",
                  url: Constants.appRoot + "/api/myapi/save",
                  type: "POST",
                  data: JSON.stringify({ changeRequests: ko.toJS(self.changeRequests), comment: comment()}),
                  success: function (response) {
                      //.......
                  }
      
      //api method
      [HttpPost]
              public HttpResponseMessage Save(ChangeSet changeSet)
              {
                  //dostuff
              }
      

      然后,我必须创建一个模型,将 json 对象转换为我可以在 C# 中使用的对象

      //model
      namespace Web.Models
      {
          using Application.Models;
      
          public class ChangeSet
          {
              public UserChangeRequest[] ChangeRequests { get; set; }
      
              public string Comment { get; set; }
          }
      }
      

      感谢马库斯的开始!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-13
        • 2011-03-01
        • 1970-01-01
        相关资源
        最近更新 更多