我对如何使用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调用并将其返回显示以确保数据已发送到控制器。
答案 0 :(得分:3)
这与您构建请求的方式有关。您的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"])});
}
我相信你会得到你正在寻找的回应。
答案 1 :(得分:2)
好的,使用Ajax尝试使用此代码将数据传递给您的操作方法:
jQuery.ajax({
url: '@Url.Action("AddLink", "User")',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({ title: title, url: url }),
success: function (result) { }
});
答案 2 :(得分:1)
您是否尝试过写完整个网址?我有一个在我的本地IIS上运行的项目有同样的问题。完整的网址是http://localhost/myproject/user/addlink,但在jQuery ajax调用中使用“/ user / addlink”提交给http://localhost/user/addlink(注意“myproject”缺失,因为它实际上并不是jQuery的基本网址知道)。
答案 3 :(得分:1)
使用诸如firebug之类的工具来确保调用您期望的网址。
调试例程=>
答案 4 :(得分:0)
您是否尝试过使用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的代码应该是不必要的。
答案 5 :(得分:0)
我还没有花时间测试它,但它看起来应该可以工作,我想我会确保你装饰控制器功能让它知道它正在寻找如下的帖子:
[HttpPost]
public ActionResult AddLink()
{
return Json(new { Result = string.Format(Request.Form["title"] + " " + Request.Form["url"])});
}
如果这些解决方案都不适合你,我今天下午应该有时间进行测试。
答案 6 :(得分:0)
所以我有一点时间试图弄清楚如何从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]
注释。也可能是这种情况。
我希望这有帮助!
干杯!