【问题标题】:ASP.NET MVC and JQuery get info to controllerASP.NET MVC 和 JQuery 获取信息到控制器
【发布时间】:2010-09-29 16:58:30
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    这与您构建请求的方式有关。您的 JQuery 调用将数据作为 POST 数据发送到 User 控制器上的 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"])});
    }
    

    我相信你会得到你想要的回应。

    【讨论】:

    • 可以使用 Request.Form 访问它,但是如果可以的话,ASP.NET MVC 框架也会参数化表单值(尽管如果相同的话会有点混乱值在 url 参数和表单中看到)。
    【解决方案2】:

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

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

    【讨论】:

    • 您只需继续发布相同的代码 sn-p 作为您可以找到的每个 mvc/ajax 问题的答案。它实际上在这里没有帮助。 -1
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      调试例程 =>

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

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

      【讨论】:

        【解决方案5】:

        您是否尝试过使用 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 的代码应该是不必要的。

        【讨论】:

        • 你有没有使用 firebug 来检查正在发送的数据?是否正在调用操作(这与路由问题有关)?
        【解决方案6】:

        我还没有花时间测试它,但它看起来应该可以工作,我想我会确保你装饰控制器功能,让它知道它正在寻找类似以下的帖子:

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

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

        【讨论】:

          【解决方案7】:

          所以我花了一点时间试图弄清楚如何从 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] 注释。也可能是这样。

          我希望这会有所帮助!
          干杯!

          【讨论】:

            猜你喜欢
            • 2014-08-28
            • 2013-12-15
            • 1970-01-01
            • 1970-01-01
            • 2012-10-23
            • 1970-01-01
            • 2015-05-03
            • 2019-03-28
            • 2011-01-17
            相关资源
            最近更新 更多