2010-02-05 5 views
10

Ich kann für Ansichten in einer MVC-Projekt wie dieses eine Basisklasse haben:ASP.NET MVC generische Basisansichtsklasse

public class BaseViewPage : System.Web.Mvc.ViewPage 
{ 
    public string Something { get; set; } 
} 

Und dann in der ASPX kann ich dies tun:

<%@ Page Something="foo" Language="C#" Inherits="MyNamespace.BaseViewPage" %> 

Das funktioniert gut; das Problem ist, wenn ich versuche, das gleiche mit der generischen Version zu tun:

public class BaseViewPage<TModel> : 
    System.Web.Mvc.ViewPage<TModel> where TModel : class 
{ 
    public string Something { get; set; } 
} 

Wenn ich versuche, das von der ASPX zu verwenden, wie folgt aus:

<%@ Page Something="foo" Language="C#" 
    Inherits="MyNamespace.BaseViewPage<SomeClass>" %> 

erhalte ich die Fehlermeldung:

Fehler beim Parsen Attribut ‚etwas‘: Typ ‚System.Web.Mvc.ViewPage‘ hat noch keine öffentliche Eigenschaft mit dem Namen ‚etwas‘.

Beachten Sie, wie es versucht, System.Web.Mvc.ViewPage anstelle meiner BaseViewPage-Klasse zu verwenden. Um es interessanter zu machen, wenn ich das "Something" -Attribut aus der Page-Direktive entferne und etwas Code in die generische Version von BaseViewPage (OnInit zum Beispiel) setze, wird die Klasse tatsächlich/used/instanziiert genannt.

Also, mache ich etwas falsch oder ist dies eine Einschränkung/bug? Vielen Dank.

+0

mögliche Duplikate von [Generic Inherited ViewPage <> und neue Eigenschaft] (http://Stackoverflow.com/questions/1480373/generic-inherited-viewpage-and-new-property) –

Antwort

7

hatte ich diese genau die gleiche Frage vor ein paar Monaten. Fuhr mich verrückt bis Justin Grant answered it here.

+0

Sehr schön; Danke vielmals! Ich habe versucht, SO vor dem Posten zu suchen, aber ich denke, ich habe nicht die richtigen Worte verwendet ... – pbz