【问题标题】:Ajax post doesn't pass any data to MVC controllerAjax post 不向 MVC 控制器传递任何数据
【发布时间】:2014-10-14 09:46:09
【问题描述】:

这个:

        $.ajax({
            url: '/Merchant/SaveDirty',
            type: 'POST',
            dataType: 'json',
            data: ko.toJSON(dirtyItems),
            contentType: 'application/json; charset=utf-8',
            success: function (data) {
                // get the result and do some magic with it
                //var message = data.Message;
                alert(ko.toJSON(dirtyItems));
            }
        });

...目前称之为:

[HttpPost]
public void SaveDirty(string json)
{

}

...但是当我在 SaveDirty 中命中断点时,没有数据通过。我已经验证 ko.toJSON(dirtyItems) 在 javascript 中返回一个 JSON 字符串。我做错了什么?

谢谢!

【问题讨论】:

  • 尝试数据:{json: JSON.stringify(ko.toJSON(dirtyItems))}
  • 戴夫,这会导致我的 MVC 控制器方法没有被命中。
  • 好的,然后只用 json.stringify 部分试试
  • @Killingsworth,您是否尝试过创建 C# 对象来为您的物品建模?然后您的控制器可以只接受这些列表或数组,MVC 将为您处理绑定。
  • 我可能是错的,因为我从未使用过 .net。但是,从快速谷歌搜索来看,控制器操作的参数似乎是 GET 变量?只是一个想法。

标签: javascript jquery ajax asp.net-mvc


【解决方案1】:

这应该可行:

$.ajax({
            url: '@Url.Action("SaveDirty", "Merchant")'
            type: 'POST',
            dataType: 'json',
            data: JSON.stringify(dirtyItems),
            contentType: 'application/json; charset=utf-8',
            success: function (data) {
                // get the result and do some magic with it
                //var message = data.Message;
                alert(ko.toJSON(dirtyItems));
            }
        });

【讨论】:

    【解决方案2】:

    @KillingsWorth,您发布 JSON 字符串是否有任何具体原因?如果没有,您可以创建一个对应于dirtyitems 类型的类,并在您的控制器方法中接受dirtyItems 列表。

    Class DirtyItem 
    { // dirty item properties }
    
    [HttpPost]
    public void SaveDirty(List<DirtyItem> dirtyItems)
    {
    
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用以下内容:

      $.ajax({

              url: '/Merchant/SaveDirty',
      
              type: 'POST',
      
              dataType: 'json',
      
              data: JSON.stringify(dirtyItems),
      
              contentType: 'application/json; charset=utf-8',
      
              success: function (data) {
                  ///
      

      ///

              }
      
          });
      

      但如果您在申请中使用了 knockout.js,那么您应该执行以下操作:

      $.ajax({

              url: '/Merchant/SaveDirty',
      
              type: 'POST',
      
              dataType: 'json',
      
              data:JSON.stringify(ko.mapping.toJS(dirtyItems)),
      
              contentType: 'application/json; charset=utf-8',
      
              success: function (data) {
      
                  // get the result and do some magic with it
      
                  //var message = data.Message;
      
                  alert(ko.toJSON(dirtyItems));
      
      
              }
      
          });
      

      【讨论】:

      • 关于“data:ko.toJSON(dirtyItems)”被更改为“data:JSON.stringify(ko.mapping.toJS(dirtyItems))”的一些事情使得 ajax 调用甚至没有命中我的 mvc 控制器.
      • 您是否遇到任何 javascript 错误,(按 ctrl+shift+j 检查您的 js 错误)请告诉我
      • 请检查来自 ajax 请求的 url 是否正确,您可以从浏览器控制台中检查它,或者提供一个完整的 url,如“localhost/Merchant/SaveDirty”只是为了检查,看看它是否有效?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-14
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多