ASP.NET MVC和JQuery获取信息到控制器

我对如何使用jQuery做ajax的东西感到很困惑,似乎我尝试的越多,我就越困惑。 在这一点上,我想要做的就是使用jQuery ajax将数据传送到我的控制器。 我的jquery ajax调用的一些代码是。

$(function() { $('#buttonAddLink').click(function() { var AjaxLink = { title: $("#linkTitle").val(), url: $("#linkUrl").val() }; $.ajax({ url: '/User/AddLink', type: 'POST', data: AjaxLink, dataType: 'json', success: function(result){ $('.added').html(result.Result).show(); } }); }); }); 

这是我的控制器和我正在使用的动作。 从尝试查看几个教程,它“应该”尽我所知,但显然我不会像我想的那样得到它。

 public ActionResult AddLink(string title, string url) { return Json(new { Result = string.Format(title + " " + url)}); } 

所有我基本上都想做的就是做Ajax调用并将其返回显示只是为了确保数据被发送到控制器。

它与您构建请求的方式有关。 您的JQuery调用将数据作为POST数据发送到用户控制器上的AddLink操作,这意味着在C#代码中,您将通过Request.Form对象访问它。 根据您的尝试,您将构建jQuery URL

 /User/AddLink/{Title}/{URL} 

这将要求您在处理这种输入的Global.ASAX文件中编写规则。 简而言之,如果您只是修改AddLink方法,如下所示:

 public ActionResult AddLink() { return Json(new { Result = string.Format(Request.Form["title"] + " " + Request.Form["url"])}); } 

我相信你会得到你正在寻找的回应。

好的,使用Ajax尝试使用此代码将数据传递给您的操作方法:

 jQuery.ajax({ url: '@Url.Action("AddLink", "User")', type: 'POST', contentType: 'application/json', data: JSON.stringify({ title: title, url: url }), success: function (result) { } }); 

你有没有尝试写出完整的URL? 我有一个在我的本地IIS上运行的项目有同样的问题。 完整的URL是http:// localhost / myproject / user / addlink ,但在jQuery ajax调用中使用“/ user / addlink”提交到http:// localhost / user / addlink (注意“myproject”缺失,因为就jQuery而言,它实际上并不是基本URL。

使用诸如firebug之类的工具来确保调用您期望的URL。

调试例程=>

  1. 使用Firbug确定正在调用正确的URL并在post中发送正确的数据
  2. 在操作中断开调用并确保正确填充参数
  3. 再次使用Firebug检查响应

如果您喜欢IE,也可以使用IE开发人员工具栏代替Firebug。 如果调用url和post数据看起来正确,并且未调用该操作,则应检查路由规则。 即它是否有任何默认值,在这种情况下,MVC框架将寻找包含这些默认值的方法签名(你的url规则中有{id}吗?)

你尝试过使用jQuery.post方法应该是这样的

 jQuery.post("/User/AddLink",AjaxLink,function(data,textStatus) { if(textStatus=="success") { //do something with data which is the result from the call} } else { //failed somewhere along the line } },"json"); 

post值被映射到MVC调用中的参数,因此foxxtrot的代码应该是不必要的。

我还没有花时间测试它,但看起来它应该工作,我想我会确保你装饰控制器function让它知道它正在寻找如下的post:

 [HttpPost] public ActionResult AddLink() { return Json(new { Result = string.Format(Request.Form["title"] + " " + Request.Form["url"])}); } 

如果这些解决方案都不适合你,我今天下午应该有时间进行测试。

所以我有点时间试图弄清楚如何从AJAX调用中获取数据。 我将JSON对象从视图传递到控制器,然后在完成后返回对象的ID。

所以,我终于开始工作了,这就是我在视图中所做的:

 var obj = { property1 : '', property2 : '' }; $.ajax({ // Returns the full url url: '@Url.Action("Method", "Controller")', // Sends as a json object, I actually have an object that maps to my ViewModel, this is just for explaining data: obj, // You are telling that you are receiving a json object dataType: 'json', success: function (id) { // do code here with id } }) 

对于我的控制器,我返回了一个Json对象,并将AllowGet作为JsonRequestBehavior

 public ActionResult Method (ViewModel vm) { int id = ... (do something with the vm) return Json(id, JsonRequestBehavior.AllowGet); } 

编辑:此外,您似乎将POST作为对控制器的请求类型,并且您的控制器方法没有[HttpPost]注释。 也可能是这种情况。

我希望这有帮助!
干杯!