9 votes

Problème de reconnaissance des aides html dans asp.net mvc 3 razor

Voici à quoi ressemble mon aide 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());
            }

     }
}

J'ai essayé de l'utiliser dans cette vue :

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

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

Il me donne cette erreur :

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?)

Qu'est-ce que je fais de mal ? Mes espaces de noms sont corrects. Il n'apparaît pas dans l'intellisense de @Html

17voto

Darin Dimitrov Points 528142

Vous pourriez ajouter :

@using WebApp.WebUI

en haut de votre vue Razor.

Et si vous souhaitez réutiliser cette aide dans de nombreuses vues différentes pour éviter d'ajouter la clause using à chaque fois, vous pouvez l'ajouter à la balise <namespaces> de la section ~/Views/web.config fichier :

<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>

Après avoir fait cela, assurez-vous de recompiler et de rouvrir la vue Razor pour que l'Intellisense ait le temps de la prendre en compte.

2voto

Wizact Points 151

Comme Darin l'a dit mais, pour l'utiliser globalement, vous devez probablement l'ajouter à la fois à la section ~/Views/web.config et ~/web.config.

1voto

Pour que les aides html fonctionnent à l'échelle mondiale, suivez la réponse de Darin Dimitrov. Une fois que c'est fait, fermez la vue .cshtml et rouvrez-la, l'intellisense commence à fonctionner.

Référence : Razor - mvc 3 - L'espace de nom vers web.config fonctionne mais intellisense ne reconnaît pas l'extension

0voto

Web Devvy Points 45

Pour moi, j'utilisais Nopcommerce et j'ai dû ajouter l'instruction using @using Nop.Web.Framework.Security.Captcha

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X