Question

Je construis un site Web ASP.Net MVC. Plutôt que de tout avoir dans un projet, j'ai décidé de séparer Web, Modèle et Contrôleur en plusieurs projets de la même solution, se référant les uns aux autres.

Le référencement se passe comme ceci:

  

Web --- [références] --- > Contrôleur --- [références] --- & Gt; Modèle

Maintenant, je voulais ajouter 2 méthodes personnalisées à la classe HtmlHelper - elles sont appelées " IncludeScript " et " IncludeStyle " ;. Ils prennent chacun un paramètre de chaîne unique et génèrent un script ou une balise de lien, respectivement.

J'ai créé une classe d'extendeur, conformément à la documentation disponible sur le Web, et écrit les deux méthodes et compilé l'application.

Maintenant, lorsque je vais sur la page Public.Master (qui est ma page principale principale et l'un des endroits où je compte utiliser ces méthodes), je peux entrer un code tel que ci-dessous:

<%= Html.IncludeScript("\js\jquery.js") %>

IntelliSense détecte la méthode IncludeScript et me montre parfaitement la syntaxe. Je pense donc que tout devrait fonctionner.

Mais ce n'est pas le cas.

Tout est compilé, mais dès que j'exécute l'application, l'erreur d'exécution suivante apparaît à la ligne 14 de Default.aspx.cs:

c:\\Projects\\PhoneReel\\PhoneReel.Web\\Views\\Shared\\Public.Master(11): error CS0117: 'System.Web.Mvc.HtmlHelper' does not contain a definition for 'IncludeScript'

Voici la ligne de code sur laquelle l'erreur se produit:

httpHandler.ProcessRequest(HttpContext.Current);

Des idées sur ce qui pourrait mal tourner ici?

Était-ce utile?

La solution

Assurez-vous que l’espace de noms de vos extensions est accessible à notre vue. Vous avez besoin de cela à votre avis:

<%@ Import Namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"%>

ou ceci dans votre section d'espaces de noms de configuration Web:

<add namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"/>

Autres conseils

Si vous utilisez des vues à caractère fortement typé et que votre méthode d'extension est étendue HtmlHelper<object>, l'extension ne sera pas trouvée. Vous devez créer une extension générique pour étendre HtmlHelper<T>.

public static string IncludeScript<T>(this HtmlHelper<T> html, string url) {
   return "<script type=\"text/javascript\" src=\"" + url + "\"></script>";
}

Ensuite, votre méthode d’extension s’affiche.

J'espère que cela aide.

Assurez-vous d'avoir une directive d'importation dans l'espace de noms de vos méthodes d'extensions dans votre page.

Sinon, Visual Studio pourra peut-être voir, mais votre site Web ne le pourra pas.

Êtes-vous sûr que le compilateur est défini sur .NET Framework 3.5? C'est ce qui m'est arrivé lorsque, par inadvertance, j'ai défini le compilateur sur .NET Framework 2.0

Dans la méthode IncludeScript, assurez-vous que ce que vous étendez est System.Web.Mvc.HtmlHelper. Il est possible qu'il y ait un HtmlHelper dans un autre espace de noms.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top