Я участвую в реализации собственного решения CAPTCHA (т.е. не reCaptcha) в моем приложении.Я построил его в соответствии с книгой Сандерсона, Pro ASP.NET MVC Framework.Он встроен в класс HtmlHelper, поэтому я могу назвать его в своем представлении как
<%= Html.Captcha("nameOfGeneratedCaptchaIdField")%>
Однако, чтобы использовать это, мне понадобится способ разрешить его повторную генерацию.то есть, если вы не можете прочитать это, нажмите [здесь].
Это [здесь] Я хочу быть действием контроллера, которое генерирует изображение капчи и выплевывает html.(Я буду использовать это в ссылке Ajax.ActionLink.)
Но у меня возникают проблемы с выяснением, как это сделать в моем контроллере.Как получить дескриптор для HtmlHelper, который требуется для HtmlHelper
public ActionResult RegenerateCaptcha(string name)
{
var myHtmlHelper = ???;
var newCaptcha = Captcha.Helpers.CaptchaHelper.Captcha(myHtmlHelper, name);
if (Request.IsAjaxRequest())
{
return Content(newCaptcha.ToString());
}
else
{
return Content(newCaptcha.ToString());
}
}
Мой помощник по кодировке закодирован как:
// this is invoked in a view by <%= Html.Captcha("myCaptcha") %>
public static string Captcha(this HtmlHelper html, string name)
{
// Pick a GUID to represent this challenge
string challengeGuid = Guid.NewGuid().ToString();
// Generate and store a random solution text
var session = html.ViewContext.HttpContext.Session;
session[SessionKeyPrefix + challengeGuid] = MakeRandomSolution();
// Render an <IMG> tag for the distorted text,
var urlHelper = new UrlHelper(html.ViewContext.RequestContext);
string url = urlHelper.Action("Render", "CaptchaImage", new{challengeGuid});
// fill it with a newly rendered image url,
// plus a hidden field to contain the challenge GUID
return string.Format(ImgFormat, name, challengeGuid, url);
}
Я думаю, я могу просто скопировать это из помощникаи вставьте его в действие моего контроллера, но это выглядит немного гетто ...
Спасибо.