Domanda

Sto costruendo un sito Web ASP.Net MVC. Piuttosto che avere tutto in un unico progetto, ho deciso di separare il Web, il Modello e il Controller in diversi progetti nella stessa soluzione, che si riferiscono l'un l'altro.

I riferimenti vanno così:

  

Web --- [riferimenti] --- > Controller --- [riferimenti] --- & Gt; Modello

Ora volevo aggiungere 2 metodi personalizzati alla classe HtmlHelper - si chiamano " IncludeScript " e " IncludeStyle " ;. Ciascuno accetta un singolo parametro stringa e genera rispettivamente uno script o un tag di collegamento.

Ho creato una classe extender, secondo la documentazione sul web, ho scritto i due metodi e compilato l'applicazione.

Ora, quando vado nella pagina Public.Master (che è la mia pagina principale, e uno dei luoghi in cui intendo utilizzare questi metodi), posso inserire un codice come di seguito:

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

IntelliSense raccoglie e include il metodo IncludeScript e mi mostra bene la sintassi. Quindi mi aspetto che tutto dovrebbe funzionare.

Ma non lo è.

Tutto viene compilato, ma non appena eseguo l'applicazione, viene visualizzato il seguente errore di runtime dalla riga 14 di 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'

Ecco la riga di codice su cui si verifica l'errore:

httpHandler.ProcessRequest(HttpContext.Current);

Qualche idea su cosa potrebbe andare storto qui?

È stato utile?

Soluzione

Controlla per assicurarti che lo spazio dei nomi delle tue estensioni sia accessibile alla nostra vista. È necessario questo a tuo avviso:

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

o questo nella sezione degli spazi dei nomi della configurazione web:

<add namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"/>

Altri suggerimenti

Se utilizzi visualizzazioni fortemente tipizzate e il tuo metodo di estensione si sta estendendo HtmlHelper<object>, non troverà l'estensione. Dovresti creare un extender generico per estendere HtmlHelper<T>.

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

Quindi vedrai comparire il tuo metodo extender.

Spero che sia d'aiuto.

Assicurati di avere una direttiva di importazione nello spazio dei nomi dei tuoi metodi di estensione nella tua pagina.

Altrimenti, Visual Studio potrebbe essere in grado di vedere, ma il tuo sito Web non sarà in grado di farlo.

Sei sicuro che il compilatore sia impostato su .NET Framework 3.5? Questo mi è successo quando ho inavvertitamente impostato il compilatore su .NET Framework 2.0

Nel metodo IncludeScript assicurati che ciò che stai estendendo sia System.Web.Mvc.HtmlHelper. È possibile che esista un HtmlHelper in qualche altro spazio dei nomi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top