我之前使用过BotDetect来使用asp WEBFORM
上的验证码,但现在当我尝试使用NuGet将BotDetect添加到另一个Asp BotDetect.Web.UI.WebFormsCaptcha.OnInit(EventArgs e)
项目时,我遇到了一个'对象'在调试时,引用未设置为对象'错误的实例。
我无法加载页面,也无法进行任何中断。当它尝试执行我的表单页面的应用程序见解请求GET时似乎失败了。然后它会在System.Web.dll
中抛出一个无法处理的异常然而,话虽如此,当我尝试运行调试器时,我仍然遇到了“对象引用未设置为对象实例”错误,但它引用了BotDetect
我删除了BotDetect包,重新添加了程序集,尝试从工作项目添加程序集,我试图从头开始重新创建项目,看看我是否有错误配置的东西。似乎没什么用。
我目前有来自NuGet包(版本4.0.1)的BotDetect.Web.MVC
和<package id="Captcha" version="4.0.1" targetFramework="net452" />
,我已经检查过以确保我在我的.net 4.5项目中使用.net 4.5版本
我已经检查了我的Packages.config,我可以看到:
<asp:Content ID="Content4" ContentPlaceHolderID="ContentPlaceHolder2" runat="server">
<fieldset>
<legend>ASP.NET WebForm CAPTCHA Validation</legend>
<p class="prompt">
<label for="CaptchaCodeTextBox">Retype the characters from the picture:</label></p>
<BotDetect:WebFormsCaptcha runat="server" ID="ExampleCaptcha"
UserInputControlID="CaptchaCodeTextBox" />
<div class="validationDiv">
<asp:TextBox ID="CaptchaCodeTextBox" runat="server"></asp:TextBox>
<asp:Button ID="ValidateCaptchaButton" runat="server" />
<asp:Label ID="CaptchaCorrectLabel" runat="server" CssClass="correct"></asp:Label>
<asp:Label ID="CaptchaIncorrectLabel" runat="server" CssClass="incorrect"></asp:Label>
</div>
</fieldset>
以下是我引用BotDetect Captcha的代码。它是一个MasterPage网络表单,但是Captcha驻留在内容占位符中,因为我们在渲染主文件后与它进行交互。
我只是不确定我还能做些什么来解决这个问题,有什么建议吗?
ASP表单页
Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
' initial page setup
If Not IsPostBack Then
' set control text
ValidateCaptchaButton.Text = "Validate"
CaptchaCorrectLabel.Text = "Correct!"
CaptchaIncorrectLabel.Text = "Incorrect!"
' these messages are shown only after validation
CaptchaCorrectLabel.Visible = False
CaptchaIncorrectLabel.Visible = False
End If
If IsPostBack Then
' validate the Captcha to check we're not dealing with a bot
Dim isHuman As Boolean
isHuman = ExampleCaptcha.Validate()
If isHuman Then
CaptchaCorrectLabel.Visible = True
CaptchaIncorrectLabel.Visible = False
Else
CaptchaCorrectLabel.Visible = False
CaptchaIncorrectLabel.Visible = True
End If
End If
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim HF As HiddenField = DirectCast(Page.Master.FindControl("HF1"), HiddenField)
If Not IsPostBack Then
SetInitialRow()
ElseIf HF.Value = "AddNewRow" Then
AddNewRowToGrid()
Else
btnSubmit_Click()
End If
Done:
End Sub
ASP表格背后的代码
mkdir -p /Users/YourUsernameHere/Library/Python/2.7/lib/python/site-packages
echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")' >> /Users/YourUsernameHere/Library/Python/2.7/lib/python/site-packages/homebrew.pth
答案 0 :(得分:2)
所以我已经与BotDetect的开发者交谈了,事实证明这实际上是他们当前发布的一个错误。
您目前无法使用BotDetect(v4.0.1)在内容页面(带有母版页的Web表单)中设置UserInputControlID属性。在下一个版本中会有一个补丁。
与此同时,根据我发布的代码,您可以在代码隐藏(VB)中以编程方式设置它。
CODE BEHIND(在page_prerender中)
ExampleCaptcha.UserInputID = CaptchaCodeTextBox.ClientID
您可能还需要替换
isHuman = ExampleCaptcha.Validate()
用的
isHuman = ExampleCaptcha.Validate(CaptchaCodeTextBox.Text.Trim())
内容网页
<BotDetect:WebFormsCaptcha runat="server" ID="ExampleCaptcha" />