从 JQuery 将 JSON 发布到 ASP.NET MVC 4 操作
Posted
技术标签:
【中文标题】从 JQuery 将 JSON 发布到 ASP.NET MVC 4 操作【英文标题】:Post JSON to ASP.NET MVC 4 action from JQuery 【发布时间】: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 字符串化对象。
【参考方案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');
);
);
【讨论】:
以上是关于从 JQuery 将 JSON 发布到 ASP.NET MVC 4 操作的主要内容,如果未能解决你的问题,请参考以下文章
将 JSON 数据从 JQuery 发送到 WCF REST 方法时出现问题
如何将 JSON 对象从 Python 脚本发送到 jQuery?
将 json 对象从 jquery 发送到 angularjs 并使用 ng-repeat
通过 jQUERY 将 JSON 数据从 URL 解析为 HTML