Проблема с распознаванием помощников html в бритве asp.net mvc 3 - PullRequest
9 голосов
/ 27 апреля 2011

Вот как выглядит мой Html-помощник:

namespace WebApp.WebUI
{
    public static class HtmlExtensions
    {

            public static MvcHtmlString GenerateCaptcha(this HtmlHelper helper, string theme)
            {
                string publicKey = ConfigurationManager.AppSettings["CaptchaKey_Public"];
                string privateKey = ConfigurationManager.AppSettings["CaptchaKey_Private"];
                var captchaControl = new Recaptcha.RecaptchaControl
                        {
                            ID = "recaptcha",
                            Theme = theme,
                            PublicKey = publicKey,
                            PrivateKey = privateKey
                        };

                var htmlWriter = new HtmlTextWriter(new StringWriter());

                captchaControl.RenderControl(htmlWriter);

                return new MvcHtmlString(htmlWriter.InnerWriter.ToString());
            }

     }
}

Я пытался использовать его в этом представлении:

    @{
        ViewBag.Title = "Register";
    }
    @model WebApp.WebUI.ViewModel.RegisterModel

    @using (Html.BeginForm("Register", "Auth", FormMethod.Post, new { Id = "ERForm" }))
    {
        @Html.GenerateCaptcha("clean")   
    }

Это дает мне эту ошибку:

CS1061: 'System.Web.Mvc.HtmlHelper<WebApp.WebUI.ViewModel.RegisterModel>' does not contain a definition for 'GenerateCaptcha' and no extension method 'GenerateCaptcha' accepting a first argument of type 'System.Web.Mvc.HtmlHelper<WebApp.WebUI.ViewModel.RegisterModel>' could be found (are you missing a using directive or an assembly reference?)

Что я делаю не так? Мои пространства имен верны. Он не отображается в intellisense для @Html

Ответы [ 4 ]

17 голосов
/ 27 апреля 2011

Вы можете добавить:

@using WebApp.WebUI

в верхней части окна Razor.

И если вы хотите повторно использовать этот помощник среди множества различных представлений, чтобы избежать добавления предложения using каждый раз, когда вы можете добавить его в раздел <namespaces> файла ~/Views/web.config:

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
        <namespaces>
            <add namespace="System.Web.Mvc" />
            <add namespace="System.Web.Mvc.Ajax" />
            <add namespace="System.Web.Mvc.Html" />
            <add namespace="System.Web.Routing" />
            <add namespace="WebApp.WebUI" />
        </namespaces>
    </pages>
</system.web.webPages.razor>

После этого убедитесь, что вы перекомпилируете и снова откройте окно Razor, чтобы Intellisense успел его забрать.

2 голосов
/ 11 июня 2012

Как сказал Дарин, но, чтобы использовать его глобально, вам, вероятно, нужно добавить его в разделы ~ / Views / web.config и ~ / web.config.

1 голос
/ 18 декабря 2014

Чтобы html-помощники работали глобально, следуйте ответу Дарина Димитрова. Как только это будет сделано, закройте представление .cshtml и снова откройте его, intellisense начнет работать.

Ссылка: Razor - mvc 3 - Пространство имен для web.config работает, но intellisense не распознает расширение

0 голосов
/ 12 декабря 2018

Для меня я использовал Nopcommerce и мне пришлось добавить оператор использования @using Nop.Web.Framework.Security.Captcha

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