2013-05-13 239 views
3

我試圖在我的應用程序中對頁面的局部視圖實現驗證碼。我將captcha作爲控件通過web.config引用。我已經使用這個論壇帖子中的GenericHandler和Class文件:http://forums.asp.net/t/1871186.aspx/1ASP.NET MVC CAPTCHA實現

如果我使用簡單的輸入標籤,如何引用用戶的輸入?我應該使用HtmlHelper嗎?

  <div class="captcha"> 
       <rhcap:Captcha ID="Captcha1" runat="server"></rhcap:Captcha> 
       <input type="text" id="UserCaptchaText"><input/> 
       <%= Html.TextAreaFor(m => m.UserCaptcha) %> 
      </div> 

      <%if(Captcha1.Text != /* How can get the users input here?*/) { 
        //display error 

      }else{ 
        //proceed 
      }%> 
+1

的NuGet **谷歌驗證碼V2 **爲MVC 4和5 我寫的 - [NuGet包(https://www.nuget.org /packages/reCAPTCH.MVC/) - [Demo And Document](http://recaptchamvc.apphb.com/) – Sender 2015-06-16 13:54:32

回答

12

使用的NuGet安裝的Recaptcha爲.NET(支持MVC也一樣)

http://nuget.org/packages/RecaptchaNet/

文檔是在網站上:

http://recaptchanet.codeplex.com/

還有其他的驗證碼:

http://captchamvc.codeplex.com/

+0

我的上級不喜歡ReCaptcha。我怎麼能說服他,這是最好的選擇?它花了我不到5分鐘來實施ReCaptcha ... – user1977591 2013-05-13 15:32:14

+1

@ user1977591 - 那麼,這是一個很好的論點;) – 2013-05-13 15:33:37

+0

是的。他們認爲來自微軟的內置驗證碼同樣簡單。任何估計需要多長時間才能使用內置的驗證碼?我無法找到很多文檔,至少不是MVC 4 .. – user1977591 2013-05-13 15:34:45

2

首先,它看起來像混合標準的ASP.NET和ASP.NET MVC。如果你想做MVC,那麼標準的做法是使用Html.TextBoxFor()類型的東西,然後你在控制器動作方法中處理它的值,而不是在頁面上寫內容。所以,你有這樣的事情:

Page.aspx 
<rhcap:Captcha ID="Captcha1" runat="server"></rhcap:Captcha> 
<%= Html.TextBoxFor(m => m.UserCaptcha) %> 

,然後在:

SomeController.cs 

[HttpGet] 
public ActionResult Page() 
{ 
    // generate captcha code here 
    ControllerContext.HttpContext.Session["Captcha"] = captchaValue; 
    return View(new PageViewModel()); 
} 

[HttpPost] 
public ActionResult Page(PageViewModel model) 
{ 
    if (model.UserCaptcha == ControllerContext.HttpContext.Session["Captcha"]) 
    { 
     // do valid captcha stuff 
    } 
} 

藉此來一個新的水平將是實現它在FilterAttribute。但是這應該適用於大多數用途。

8

的NuGet 谷歌驗證碼V2爲MVC 4和5

的Web.config文件在web.config文件的appSettings部分,添加鍵如下:

<appSettings> 
    <add name="reCaptchaPublicKey" value="Your site key" /> 
    <add name="reCaptchaPrivateKey" value="Your secret key" /> 
</appSettings> 

在您的視圖中添加Recaptcha。

@using reCAPTCHA.MVC 
@using (Html.BeginForm()) 
{ 
    @Html.Recaptcha() 
    @Html.ValidationMessage("ReCaptcha") 
    <input type="submit" value="Register" /> 
} 

驗證用戶的響應。

[HttpPost] 
[CaptchaValidator] 
public ActionResult Index(RegisterModel registerModel, bool captchaValid) 
{ 
    if (ModelState.IsValid) 
    { 
    } 
    return View(registerModel); 
} 

編輯:

你也應該在你的頭標記加入,​​或者你可能會看到不正確的驗證碼

<script src="https://www.google.com/recaptcha/api.js" async defer></script>