【问题标题】:Post JSON to ASP.NET MVC 4 action from JQuery从 JQuery 将 JSON 发布到 ASP.NET MVC 4 操作
【发布时间】:2013-01-23 00:51:10
【问题描述】:

我正在开发一个使用 ASP.NET MVC 4 的应用程序。在某些方面,我觉得我正在从头开始学习一切:)。有人告诉我这是值得的。

我需要将一些 JSON 发布到我的控制器中的 Action。我的操作如下所示:

[Authorize]
public class MyController : Controller
{
    [HttpPost]
    public ActionResult RemoveItem(string itemID)
    {
      // Do stuff...
      return Json(new { Status = 1, Message="Success" });
    }
}

我的 JQuery 代码如下所示:

function removeItem(id) {
  var json = { "itemID": id };
  $.ajax({
    type: "POST",
    url: "/myController/removeItem",
    contentType: "application/json; charset=utf-8",
    data: json,
    dataType: "json",
    success: removeItemCompleted,
    error: removeItemFailed
  });
}

function removeItemCompleted(results) {
}

function removeItemFailed(request, status, error) {
}

在 Fiddler 中,我注意到返回了 500 错误。响应中的 TITLE 字段显示:“无效的 JSON 原语:itemID”。

我做错了什么?

谢谢!

【问题讨论】:

  • json 变量的值是什么样的?
  • 如果这就是你要传递的全部内容,那么真的不需要创建变量。您的方法需要一个名为 itemID 的字符串,因此您应该执行以下操作:data: { itemID: id } itemID 周围没有引号
  • @MarcusRecck 没有双引号,它不是有效的 JSON。
  • 我想学习 JSON 方法。我实际上需要传递更多数据。为了举例,我试图将其修剪下来。我的所有数据都是键/值对,但没有嵌套数组或类似的东西。这就是我想使用 JSON 的原因。
  • @BillJones - 明白了 - 但在这种情况下,除了 itemId 之外不需要传递任何东西。如果您的 Action 需要一个对象,那么您可以通过网络发送一个 json 字符串化对象。

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


【解决方案1】:

一定要发送 JSON:

data: json,

应该是

data: JSON.stringify(json),

IE7 及以下版本需要 shim:https://github.com/douglascrockford/JSON-js

注意:Dave A 的回答也是正确的,但没有直接回答您的问题。我 +1 了。

【讨论】:

  • thanx @Joe,仇恨无处不在
【解决方案2】:

您在这里似乎不需要 JSON。理想情况下,id 参数将在您的 URI 中传递:

 url: "/myController/removeItem/"+id

这可能就是无法识别您的 Action 的原因。它需要一个参数。

跟进:批评者指出传递的数据是一个字符串,因此不能作为 id 传递是不正确的。我应该指出应该重写action方法来接受string id

【讨论】:

  • Dave 请检查他的控制器动作。他提到它是字符串而不是整数。通过将 id 附加到 url 无法完成 AFAIK
  • 啊,是的,我有点马虎。仇恨的好借口;)它真的应该作为一个ID传递。字符串与否。
  • 作为@Karthik 的后续跟进,您完全错误的是 id 不能是字符串。
  • 如果我的评论有误,我很抱歉。如果传递的是字符串而不是 int 可以传递吗?我想如果它是字符串,那么只能将字符串传递给它。感谢您的跟进
  • 我也不是你的仇敌戴夫。我发现您在 SO 上的许多帖子很有用。我的坏我在评论时不能太多
【解决方案3】:
          function removeItem(id) {
  var json = { "itemID": id };
  $.ajax({
    type: "POST",
    url: "/myController/removeItem",
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify(json),
    dataType: "json",
    success: removeItemCompleted,
    error: removeItemFailed
  });
}

function removeItemCompleted(results) {
}

function removeItemFailed(request, status, error) {
}

【讨论】:

    【解决方案4】:

    使用此代码:

    $('#delete').click(function () {
            var APIURL = "/api/products";
            var id = $('#SearchText').val();
            $.ajax({
                type: "DELETE",
                url: APIURL + '/' + id,
                success: function (data) {
                    alert('Employee deleted');
                }
            });
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-30
      • 2016-06-05
      • 1970-01-01
      • 2019-03-30
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多