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

Posted

技术标签:

【中文标题】ASP.NET MVC 和 JQuery 获取信息到控制器【英文标题】:ASP.NET MVC and JQuery get info to controller 【发布时间】: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 调用并将其返回以显示,以确保数据已发送到控制器。

【问题讨论】:

【参考方案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。

调试例程 =>

    使用 Firbug 确定正在调用正确的 url 并在 post 中发送正确的数据 在操作中中断调用并确保正确填充参数 再次使用 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] 注释。也可能是这样。

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

【讨论】:

以上是关于ASP.NET MVC 和 JQuery 获取信息到控制器的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 在 ASP.Net MVC 5 中获取请求

在 asp.net mvc razor 页面中验证 jquery 中的特定表单字段

Asp.net MVC 中的 jquery 验证错误 - 无法获取属性“调用”的值:对象为空或未定义

Jquery在asp.net mvc的html表中获取带有选中复选框的行

ASP.net MVC 列表框在帖子中获取所有值

使用 Json 和 Jquery 的 Asp.net MVC4 中的级联下拉列表不填充