【问题标题】:ASP.NET MVC - How do I render an HtmlHelper method in a controller?ASP.NET MVC - 如何在控制器中呈现 HtmlHelper 方法?
【发布时间】:2010-02-19 21:42:04
【问题描述】:

我参与了在我的应用中实施原生 CAPTCHA(即不是 reCaptcha)解决方案的过程。我按照 Sanderson 的书 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);
}

我想我可以将它从 Helper 中复制出来并将其粘贴到我的控制器操作中,但这似乎有点贫民窟......

谢谢。

【问题讨论】:

标签: asp.net-mvc


【解决方案1】:

您不必在控制器中创建 html 助手。您应该创建返回验证码的局部视图并返回 PartialViewResult:

public PartialViewResult Captcha()
{
    return PartialView("Captcha");
}

【讨论】:

  • 我同意。这始终是最好留给 PartialView 的东西,而不是您在控制器方法中呈现的东西。分离出演示文稿并将其留给视图。
  • 太棒了。奇迹般有效!谢谢!
【解决方案2】:

@LukLed 是对的。 PartialView 比较适合这个,也可以看看this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多