我被困住了,谁能帮助我?在我的LogOn.aspx视图中,我在FORM标签内有登录控件(用户名,密码,RememberMe):
<form id="loginform" method="post" action="/Account/LogOn/">
在下面,我有一个隐藏的DIV,带有OPTION下拉列表和一个确认按钮,带有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”的Controller Action被命中:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult SetCompanyAndContinue(string id)
{
SessionAdapter.CustomerID = Convert.ToInt32(id);
return null;
}
但它没有发生,相反,默认的控制器动作第一次被击中:
public ActionResult LogOn()
{
return View();
}
但是(第二次)点击(相同)确认按钮后,控制器动作最终点击[SetCompanyAndContinue]。
有人可以告诉我我做错了什么吗?非常感谢提前。
答案 0 :(得分:2)
您需要将data属性作为javascript对象传递而不是字符串
$.ajax({ type: "GET",
url: "/Account/SetCompanyAndContinue",
data: ({id : 1}),
contentType: "application/json; charset=utf-8",
dataType: "json" });
我建议使用firebug来查看从jQuery发送的实际HTTP请求,这样很小的错误就会很快显现出来。
HTH
答案 1 :(得分:0)
尝试使用链接提交而不是正常的提交按钮,它可能在点击,ajax和表单之间发生冲突。
答案 2 :(得分:0)
我不知道我是否得到了正确的信息。但根据您的描述,点击“提交”按钮将尝试执行“发布”方法而不是“获取”方法。 只有在您首先访问该页面或刷新网址时才会进行“获取”调用。 使用链接按钮执行“获取”操作。
这就是为什么在你的样本中使用“Post”方法调用“/ Account / LogOnAjax /”这个动作。
答案 3 :(得分:0)
答案 4 :(得分:0)
marc.d是对的
一般的经验法则(至少它适用于我):如果你的动作没有像你期望的那样被击中,你的路线参数可能出现问题,或者如果你跌入默认路线,与帖子一起发送的表单数据不是预期的。我使用$(this).serialize()作为$ post的JQuery数据arg,我的一个隐藏表单字段为空。这个动作没有包含在任何路线中(我在这种情况下让它落到默认值),从未见过这个帖子。
答案 5 :(得分:0)
我的愚蠢错误: