ASP.NET MVC - Как мне отрендерить метод HtmlHelper в контроллере? - PullRequest
0 голосов
/ 20 февраля 2010

Я участвую в реализации собственного решения 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);
}

Я думаю, я могу просто скопировать это из помощникаи вставьте его в действие моего контроллера, но это выглядит немного гетто ...

Спасибо.

Ответы [ 2 ]

2 голосов
/ 20 февраля 2010

Вам не нужно создавать помощники HTML в вашем контроллере.Вы должны создать частичное представление, возвращающее капчу и возвращающее PartialViewResult:

public PartialViewResult Captcha()
{
    return PartialView("Captcha");
}
0 голосов
/ 20 февраля 2010

@ LukLed прав. PartialView больше подходит для этого, также вы можете посмотреть на это .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...