Frage

Ich baue eine ASP.Net MVC-Website. Anstatt alles in einem Projekt haben, habe ich beschlossen, hinaus in verschiedenen Projekten in der gleichen Lösung, die Web, Modell und Controller zu trennen, die jede andere-Referenz.

Die Referenzierung geht wie folgt aus:

  

Web --- [Referenzen] ---> Controller --- [Referenzen] ---> Modell

Jetzt wollte ich zwei benutzerdefinierte Methoden, um die Htmlhelper Klasse hinzufügen - sie sind „IncludeScript“ und „IncludeStyle“. Sie nehmen jeweils einen einzelnen String-Parameter und erzeugen ein Skript oder Link-Tag auf.

Ich habe eine Extender-Klasse erstellt, nach der Dokumentation im Web, und geschrieben, die beiden Methoden und die Anwendung kompiliert.

Nun, wenn ich in die Public.Master Seite gehen (was mein Haupt Master-Seite ist, und einer der Orte, an denen ich diese Methoden verwendet werden soll), kann ich Code eingeben, wie unten:

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

Die IntelliSense aufgreift und IncludeScript Methode und zeigt mir die Syntax einfach gut. Also würde ich erwarten, dass alles funktionieren soll.

Aber es funktioniert nicht.

Alles kompiliert, aber sobald ich die Anwendung ausführen, bekomme ich die folgenden Laufzeitfehler aus der Leitung 14 von 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'

Hier ist die Codezeile, die der Fehler passiert:

httpHandler.ProcessRequest(HttpContext.Current);

was Irgendwelche Ideen hier falsch sein könnte gehen?

War es hilfreich?

Lösung

Überprüfen Sie, dass der Namespace Ihrer Erweiterungen unserer Sicht zugänglich ist. Sie müssen entweder diese in Ihrer Sicht:

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

oder diese in Ihrem Web-Config-Namespaces Abschnitt:

<add namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"/>

Andere Tipps

Wenn Sie mit stark typisierte Ansichten und Ihre Erweiterungsmethode erweitert HtmlHelper<object>, es wird nicht die Erweiterung zu finden. Sie würden haben erstellen ein generischer Extender erweitern HtmlHelper<T>.

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

Dann werden Sie Ihre Extender Methode zeigen sich sehen.

Ich hoffe, das hilft.

Achten Sie darauf, eine Importrichtlinie Erweiterungen Methoden Namespace in Ihrer Seite haben.

Andernfalls könnte Visual Studio der Lage sein, zu sehen, aber Ihre Website wird nicht in der Lage.

Sind Sie sicher, dass der Compiler wird auf .NET Framework 3.5? Dies geschah zu mir, wenn ich den Compiler .NET Framework versehentlich gesetzt 2.0

In der IncludeScript Methode stellen Sie sicher, dass das, was Sie erweitern System.Web.Mvc.HtmlHelper ist. Es ist möglich, es ist ein Htmlhelper in einem anderen Namespace.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top