Asp.NET MVC阿贾克斯 - 张贴表格和阿贾克斯 - 获取

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。

有人可以告诉我我做错了什么吗?提前谢谢了。

+0

你如何绑定到确认按钮? – karim79 2009-09-02 13:57:34

愚蠢的错误:

  • 我添加了一个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的发送,这样微小的错误,类似于这很快就会变得明显。

心连心

比较,你可以使用调试HTTP代理像FiddlerCharles不同的GET请求。

marc.d是正确的

拇指(至少它为我的作品)的一般规则:如果像你期望不被击中你的行动,很可能东西是错误的路线params中,如果你正在进入默认路由,与帖子一起发送的表单数据不是预期的。我正在使用$(this)。serialize()作为$ post的JQuery数据参数,其中一个隐藏的表单字段为空。这个行动没有包含在任何路线中,(我让它在这种情况下陷入默认状态),从未看过这篇文章。从代表我