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

时间:2009-01-05 22:27:35

标签: c# jquery ajax asp.net-mvc

我对如何使用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调用并将其返回显示以确保数据已发送到控制器。

7 个答案:

答案 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之类的工具来确保调用您期望的网址。

调试例程=>

  1. 使用Firbug确定正在调用正确的网址并在帖子中发送正确的数据
  2. 在操作中断开调用并确保正确填充参数
  3. 再次使用Firebug检查响应
  4. 如果您喜欢IE,也可以使用IE开发人员工具栏代替Firebug。 如果调用url和post数据看起来是正确的,并且未调用该操作,则应检查路由规则。即它是否有任何默认值,在这种情况下,MVC框架将寻找包含这些默认值的方法签名(您的网址规则中是否有{id}?)

答案 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]注释。也可能是这种情况。

我希望这有帮助!
干杯!