Asp.NET MVC阿贾克斯 - 张贴表格和阿贾克斯 - 获取
我卡住了,谁能帮助我?在我LogOn.aspx查看已登录一个FORM标签内控件(用户名,密码,与rememberMe):Asp.NET MVC阿贾克斯 - 张贴表格和阿贾克斯 - 获取
<form id="loginform" method="post" action="/Account/LogOn/">
下面,我已经与OPTION下拉列表和一个确认按钮隐藏DIV,用一个onclick_event:
$.ajaxSetup({ cache: false });
$.ajax({
type: "GET",
url: "/Account/SetCompanyAndContinue",
data: "{ 'id' : '1'}",
contentType: "application/json; charset=utf-8",
dataType: "json"
});
首先,在jQuery中,我通过AJAX发布的登录凭据用户登录:
var loginCred = new Object();
loginCred.Username = $('#userName').val();
loginCred.Password = $('#password').val();
loginCred.RememberMe = $('#rememberMe').checked;
var myJsonObject = JSON.stringify(loginCred);
$.ajaxSetup({ cache: false });
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "/Account/LogOnAjax/",
data: myJsonObject,
dataType: "json",
success: function(data) {
PostCredentialsSuccess(data);
}
});
此POST可以完美运行。控制器操作中的断点由调试器命中并返回数据的JSON对象。我把这个JSON数据放到OPTION下拉列表中。此选项下拉列表随后会呈现给用户。然后,当用户点击确认按钮,第二AJAX调用时:
$.ajaxSetup({ cache: false });
$.ajax({
type: "GET",
url: "/Account/SetCompanyAndContinue",
data: "{ 'id' : '1'}",
contentType: "application/json; charset=utf-8",
dataType: "json"
});
我期望名为“SetCompanyAndContinue”控制器动作被击中:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult SetCompanyAndContinue(string id)
{
SessionAdapter.CustomerID = Convert.ToInt32(id);
return null;
}
但它艾因牛逼发生,相反,默认的控制器操作得到的打第一次:(!)
public ActionResult LogOn()
{
return View();
}
但我点击(下同),第二次确认键控制器动作终于命中[SetCompanyAndCon tinue。
有人可以告诉我我做错了什么吗?提前谢谢了。
愚蠢的错误:
- 我添加了一个cookie来这使得webbrower的行为不可预测的响应流。
- 我忘了标记为已回答
尝试使用链接提交而不是正常的提交按钮,它可能在click,ajax和form之间存在冲突。
我不知道我是否得到了正确的信息。但根据您的描述,任何点击“提交”按钮将尝试执行“发布”方法而不是“获取”方法。 只有当您首先访问网页或刷新网址时才会执行“获取”呼叫。 使用链接按钮执行“获取”操作。
这就是为什么在您的示例中使用“Post”方法调用“/ Account/LogOnAjax /”此操作的原因。
你需要的数据属性未通过作为一个JavaScript对象作为字符串
$.ajax({ type: "GET",
url: "/Account/SetCompanyAndContinue",
data: ({id : 1}),
contentType: "application/json; charset=utf-8",
dataType: "json" });
我建议使用Firebug来看看实际的HTTP请求确实会从jQuery的发送,这样微小的错误,类似于这很快就会变得明显。
心连心
marc.d是正确的
拇指(至少它为我的作品)的一般规则:如果像你期望不被击中你的行动,很可能东西是错误的路线params中,如果你正在进入默认路由,与帖子一起发送的表单数据不是预期的。我正在使用$(this)。serialize()作为$ post的JQuery数据参数,其中一个隐藏的表单字段为空。这个行动没有包含在任何路线中,(我让它在这种情况下陷入默认状态),从未看过这篇文章。从代表我
你如何绑定到确认按钮? – karim79 2009-09-02 13:57:34