2010-04-21 3 views
7

In meinen MVC-Apps deklariere ich normalerweise einen Basisansichtstyp, von dem alle meine Ansichten erben. Ich erhalte einen Parser-Fehler, wenn ich Inherits="MyView" in meiner Page-Deklaration angeben, aber nicht, wenn ich Inherits="MyApp.Web.Views.MyView" angeben.Warum kann ich in ASP.NET MVC nicht von "MyCustomView" erben, ohne den vollständigen Typnamen anzugeben?

Seltsamerweise funktioniert es funktioniert gut, wenn ich eine stark typisierte Ansicht Name: Inherits="MyView<T> angeben (wobei T ist ein beliebiger gültiger Typ).

Warum kann ich eine stark typisierte Ansicht ohne den vollständigen Typnamen, aber keine generische Ansicht angeben?

Meine Erstansicht Klasse wird wie folgt erklärt:

namespace MyApp.Web.Views { 
    public class MyView : MyView<object> { 
    } 

    public class MyView<TModel> : ViewPage<TModel> where TModel : class { 
    } 
} 

UPDATE: Bitte beachte, dass ich Import MyApp.Web.Views über web.config tun . Wenn ich es nicht tun würde, würde auch der stark typisierte Ansatz (Inherits="MyView<T>") nicht funktionieren.

Antwort

1

Von einem anderen Beitrag zu verwenden: Hier ist das zugrunde liegende Problem: die ASP.NET-Seite Parser unterstützt keine Generika als Seitentyp

lesen Sie mehr hier- Generic Inherited ViewPage<> and new Property

+0

Sehr interessant ... Ich habe noch nicht den ganzen Code auf dieser Seite gelesen, aber es hört sich so an, als ob das Problem, das ich berichte, von einigen generischen/nicht-generischen Juju verursacht wird, die hinter den Kulissen gemacht werden. Wenn es mir gelingt, den Code von Justin zu verwenden, um mein Problem zu lösen, werde ich hier ein Update veröffentlichen. –

1

Sie können Ihren Namensraum zum <namespaces> Element Ihrer web.config-Datei hinzufügen, dann sollten Sie in der Lage sein Inherits="MyView"

<pages> 
    <namespaces> 
    <add namespace="System.Web.Mvc" /> 
    <add namespace="System.Web.Mvc.Ajax" /> 
    <add namespace="System.Web.Mvc.Html" /> 
    <add namespace="System.Web.Routing" /> 
    <add namespace="MyApp.Web.Views" /> 
    </namespaces> 
</pages> 
+0

I _do_ den Namespace wie folgt importieren. Ansonsten würde auch die stark typisierte Ansicht [Inherits = "MyView [ModelType]"] nicht funktionieren. –

+0

@Seth: Aber, haben Sie den Namespace in der web.config hinzugefügt? –

Verwandte Themen