2009-07-14 14 views
1

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

5

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; 
    } 
} 
+0

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); –

+0

Das hat mir geholfen, +1 – Ropstah

+0

+1! Dies ist eine ausgezeichnete Lösung, schade, dass es nicht als Antwort markiert ist und OP seinen Account geschlossen hat. – Gup3rSuR4c

1

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.

+0

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

+0

Sollte dies nicht für '<% = Page.DoSomething (" input ")%>' funktionieren, da es sich um eine 'ViewPageExtension' handelt? – Ropstah

Verwandte Themen