Ist es möglich, der ViewPage-Klasse ein benutzerdefiniertes Hilfsobjekt hinzuzufügen, damit ich es innerhalb des Ansichtsseiten-Markups verwenden kann (genau wie Html, Url und Ajax)? Dieses Hilfsobjekt benötigt auch Daten von einem benutzerdefinierten Controller. (was durch die ViewContext-Eigenschaft möglich sein sollte)Viewpage-Klasse mit benutzerdefinierten Hilfsobjekten erweitern?
Antwort
Erstellen Sie eine neue Klasse, leiten Sie sie von System.Web.Mvc.ViewPage ab, fügen Sie eine neue Eigenschaft für den benutzerdefinierten Helper hinzu und überschreiben Sie die InitHelpers() -Methode. Zum Beispiel:
public class CustomViewPage : System.Web.Mvc.ViewPage
{
public YourCustomHelper CustomHelper
{
get;
set;
}
public virtual void InitHelpers()
{
CustomHelper = new YourCustomHelper(ViewContext);
base.InitHelpers();
}
}
public class YourCustomHelper
{
public YourCustomHelper(ViewContext viewContext)
{
if (viewContext == null) {
throw new ArgumentNullException("viewContext");
}
ViewContext = viewContext;
}
public ViewContext ViewContext
{
get;
private set;
}
}
Sie können dies mit einer Verlängerung Methode sehr leicht tun (jetzt in .NET 3.5) Betrachten wir eine Klasse wie folgt:
public static class ViewPageExtensions
{
public static string DoSomething(this ViewPage page, string input)
{
// Do something clever with the page
}
}
Solange Ihre ViewPageExtensions
Klasse sichtbar ist Die Namespaces, die Sie in Ihre ViewPage.aspx importiert haben, an der Sie gerade arbeiten, sollten Sie direkt auf die DoSomething
-Methode zugreifen können, ohne auf die ViewPageExtensions-Klasse zu verweisen.
Ich habe das selbst versucht - nett in der Theorie, aber es scheint, dass dies in der Praxis nicht wirklich funktioniert. Die IDE erkennt die Erweiterungsmethoden nicht. Seltsamerweise können Sie aus Ihren View-Dateien Dinge wie <% = this.DoSomething ("input")%> tun, aber nicht <% = DoSomething ("input")%> was von intellisense nicht erkannt wird und zu einer Laufzeit führt Ausnahme. –
Sollte dies nicht für '<% = Page.DoSomething (" input ")%>' funktionieren, da es sich um eine 'ViewPageExtension' handelt? – Ropstah
- 1. XSD mit benutzerdefinierten Attributen erweitern?
- 2. Erweitern von `find_by` mit benutzerdefinierten Schlüsseln
- 3. Erweitern SpringBootWebSecurityConfiguration mit benutzerdefinierten HttpSecurity-Konfiguration
- 4. Erweitern der benutzerdefinierten Formatierungsfunktionen von integrierten Typen
- 5. Erweitern von benutzerdefinierten Modellklassen in ExtJS 4
- 6. Erweitern eines FlowDocument mit benutzerdefinierten TextElements in wpf
- 7. Erweitern von svcutil.exe und wsdl.exe mit benutzerdefinierten Methoden
- 8. Filter Listenansicht von Kopf mit benutzerdefinierten Adapter erweitern baseadapter
- 9. Erweitern SonarQube FindBugs Plugin mit benutzerdefinierten FindBugs Plugin
- 10. Wie ein Modell aus benutzerdefinierten Modell in codeigniter erweitern
- 11. Benutzersteuerelement erweitern
- 12. Mit Haskell Perl erweitern?
- 13. Wie ein Dataclass mit toString erweitern
- 14. C# dateibasierten Ressourcenmanager erweitern
- 15. So erweitern Sie Google Now Sprachbefehle in Android mit benutzerdefinierten Aktionen
- 16. Wie kann ich die Identität mit benutzerdefinierten Attributen in ASP.NET MVC erweitern?
- 17. Android-Suffix zu EditText mit benutzerdefinierten Klasse durch Erweitern von EditText
- 18. Erweitern Sie Jquery mit ES6
- 19. Parse.com mit TypeScript: Parse.Object erweitern
- 20. TTPhotoViewController mit benutzerdefiniertem TTPhotoView erweitern
- 21. Erweitern der Textauswahl mit Javascript
- 22. XML mit XML-Schema erweitern
- 23. Element-Prototyp mit TypeScript erweitern
- 24. XML mit unbekannten Elementen erweitern
- 25. Komponente mit Eingang/Ausgang erweitern
- 26. Erweitern Sie Div mit Animation
- 27. Einfache Hide/Erweitern mit Javascript
- 28. Erweitern Fehler mit ES6 Klasse
- 29. Parameterpakete mit unterschiedlichen Längen erweitern
- 30. Regressionsgeraden erweitern mit geom_line() ggplot2
danke eugene, ich habe auch einen benutzerdefinierten Controller Kontext erstellt und ich greife darauf wie folgt zu: CustomHelper = new YourCustomHelper (ViewContext.Controller.ControllerContext als CustomControllerContext); –
Das hat mir geholfen, +1 – Ropstah
+1! Dies ist eine ausgezeichnete Lösung, schade, dass es nicht als Antwort markiert ist und OP seinen Account geschlossen hat. – Gup3rSuR4c