AjaxControlToolkit NoBotState始终是InvalidBadResponse
我正在尝试实现AjaxControlToolkit NoBot,但我总是从IsValid()
方法得到错误(状态值总是InvalidBadResponse )。 我在这里错过了什么吗?
ASCX代码:
// buttons, textboxes etc.
代码背后:
protected void Button1_Click(object sender, EventArgs e) { AjaxControlToolkit.NoBotState state; if (!NoBot1.IsValid(out state)) { Page page = HttpContext.Current.Handler as Page; ScriptManager.RegisterStartupScript(page, page.GetType(), "err_msg", "alert('" + " BOT " + "');", true); } else { ...} }
更奇怪的是:我输入数据进行登录并点击asp按钮。 NoBot状态是InvalidBadResponse
,它失败了。 但是,然后我点击浏览器的刷新按钮它要求我重新发送请求我说好,现在状态是有效的! 为什么?
我知道你从NoBot
控件获得“ InvalidBadResponse ”的唯一原因是你的浏览器中禁用了javascript。 文档页面指出NoBot
使用的技术NoBot
是
强制客户端的浏览器执行可配置的JavaScript计算并validation结果作为回发的一部分。 (例如:计算可能是一个简单的数字计算,或者也可能涉及DOM以确保涉及浏览器)
“ InvalidBadRespone ”消息表示javascript未执行(也来自上面的链接):
InvalidBadResponse:向质询提供了无效响应,表明未运行质询脚本
我会仔细检查您的浏览器设置。 我已经通过在浏览器中禁用javascript(只是为了确保)并在文档页面上尝试示例来测试这一点。
您可以使用OnGenerateChallengeAndResponse
属性自定义计算以指定事件处理程序。 我实现一个这样的事件处理程序的好例子就是这个( 这个post的代码信用):
protected void PageNoBot_GenerateChallengeAndResponse(object sender, AjaxControlToolkit.NoBotEventArgs e) { Random r = new Random(); int iFirst = r.Next(100); int iSecond = r.Next(100); e.ChallengeScript = String.Format("eval('{0}+{1}')", iFirst, iSecond); e.RequiredResponse = Convert.ToString(iFirst + iSecond); }
请参考这个
http://www.asp.net/ajaxlibrary/AjaxControlToolkitSampleSite/NoBot/NoBot.aspx
http://www.asp.net/ajaxlibrary/HOW%20TO%20Use%20the%20NoBot%20Control.ashx
正如其他答案中所提到的, InvalidBadResponse是由于Javascript挑战失败造成的。
问题:
它失败的原因是因为运行它的ASP.NET ajax库无法加载; 看看你的浏览器的javascript调试器; 这就是我的(在Chrome中)的样子
正如您所看到的, .axd
文件未被提供,并且ASP.NET Ajax client-side framework failed to load
错误ASP.NET Ajax client-side framework failed to load
错误的错误非常明显。
原因:(在我的情况下)
我有一个url重写规则,意外地改变了.axd
url – 导致它们无法提供服务。
我建议检查你的web.config
,如果需要添加该行
你的规则和这个
routes.Ignore("{resource}.axd/{*pathInfo}");
在您的Global.asax
(如果有的话)中,您注册路线(以及如果)。
检查这个SO答案: Ajax客户端框架无法加载Asp.Net 4.0
另一个可能的原因可能是master,page或control的ViewStateMode被设置为Disabled。 似乎需要启用它以使NoBot正常工作。
我在CMS的主页面上使用ViewStateMode =“Disabled”进行了一些测试,NoBotState开始在我的登录页面上返回InvalidBadResponses。 将其更改为ViewStateMode =“已启用”为我修复了它。