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 获取信息到控制器的主要内容,如果未能解决你的问题,请参考以下文章
在 asp.net mvc razor 页面中验证 jquery 中的特定表单字段
Asp.net MVC 中的 jquery 验证错误 - 无法获取属性“调用”的值:对象为空或未定义