C# AjaxControlToolkit NoBotState始终是无效的响应

C# AjaxControlToolkit NoBotState始终是无效的响应,c#,asp.net,ajaxcontroltoolkit,C#,Asp.net,Ajaxcontroltoolkit,我试图实现AjaxControlToolkit NoBot,但我总是从IsValid()方法中得到false(状态值总是invalidAddressResponse)。我是不是遗漏了什么 ASCX代码: // buttons, textboxes etc. <asp:NoBot ID="NoBot1" runat="server" CutoffMaximumInstances="5" Cutof

我试图实现AjaxControlToolkit NoBot,但我总是从
IsValid()
方法中得到false(状态值总是invalidAddressResponse)。我是不是遗漏了什么

ASCX代码:

// buttons, textboxes etc.
<asp:NoBot ID="NoBot1" 
           runat="server"             
           CutoffMaximumInstances="5" 
           CutoffWindowSeconds="60" 
           ResponseMinimumDelaySeconds="2"
           />
更奇怪的是:我输入数据进行登录,然后点击asp按钮。NoBot状态为InvalidBadResponse且失败。但,然后我点击浏览器的刷新按钮,它会要求我重新发送请求,我说确定,现在状态是有效的!为什么?

请参考此


据我所知,从
NoBot
控件获得“invalidAddressResponse”的唯一原因是浏览器中禁用了javascript。声明
NoBot
使用的技术之一是

强制客户端浏览器执行可配置的JavaScript 作为回发的一部分,计算并验证结果。(例:政府 计算可以是简单的数值计算,也可以涉及DOM 增加了浏览器参与的保证)

InvalidAddressRespone”消息表示javascript未执行(也来自上面的链接):

无效应答:向质询提供了无效应答 表明质询脚本未运行

我会仔细检查你的浏览器设置。我通过在浏览器中禁用javascript(只是为了确保)并在文档页面上尝试该示例来测试这一点

您可以使用
OnGenerateChallengeAndResponse
属性自定义计算以指定事件处理程序。实现一个这样的事件处理程序的一个很好的例子是(代码归功于):


如其他答案中所述,无效的应答是由于Javascript质询失败

问题:

对我来说,它失败的原因是运行它所需的ASP.NET ajax库无法加载;看看浏览器的javascript调试器;这就是我的(镀铬)外观

如您所见,未提供
.axd
文件,并且错误
ASP.NET Ajax客户端框架加载失败
错误非常明显

原因:(就我而言)

我有一个url重写规则,它意外地改变了
.axd
url,导致无法提供这些url

如果需要添加行,我建议您检查
web.config

<add input="{URL}" pattern="\.axd$" negate="true"/>
在您的
Global.asax
(如果您有)中注册路线的位置(如果有)


检查此项,以便回答:

另一个可能的原因可能是母版、页面或控件的ViewStateMode设置为Disabled。似乎需要启用NoBot才能正常工作


我在CMS的母版页上使用ViewStateMode=“Disabled”进行了一些测试,NoBotState开始在我的登录页上返回invalidAddressResponse。将其更改为ViewStateMode=“Enabled”已为我修复。

能否显示您的身份验证代码?ViewState和SessionState是否已启用?是,所有内容都已启用。身份验证代码是标准的成员身份验证方法(验证用户,如果不是登录失败的话)。那个代码在我上面代码的“ELSE”块中。但是第一次NotBot1.IsValid状态总是InvalidAddress响应。但当我按“刷新”时,它是有效的。更糟糕的是,我已经从教程页面下载了示例代码,同样的问题再次出现。我在本地主机上测试这个。你在页面上使用UpdatePanel吗?如果可以,可以显示标记吗?不,我不使用任何UpdatePanel。这是自定义dotNetNuke模块。Dnn使用asp脚本管理器。我不能改变它。NoBot是否需要ToolkitScriptManager?SessionState中的controlstate值与页面上隐藏字段中存储的controlstate值之间似乎不匹配。尝试使用UpdateMode=“Alwyas”将NoBot控件放入UpdatePanel
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);  
}
<add input="{URL}" pattern="\.axd$" negate="true"/>
routes.Ignore("{resource}.axd/{*pathInfo}");