2010-04-21 9 views
7

W moich aplikacjach MVC zwykle deklaruję typ widoku podstawowego, z którego dziedziczą wszystkie moje widoki. Wystąpił błąd analizatora składni, określając Inherits="MyView" w mojej deklaracji strony, ale nie, jeśli określę Inherits="MyApp.Web.Views.MyView".W ASP.NET MVC, dlaczego nie mogę dziedziczyć z "MyCustomView" bez określenia pełnej nazwy typu?

O dziwo, to działa dobrze, jeśli określę mocno wpisaną nazwę widoku: Inherits="MyView<T> (gdzie T jest dowolnym prawidłowym typem).

Dlaczego można określić widok mocno napisany bez pełnej nazwy typu, ale nie ogólny widok?

Mój pogląd bazowa klasa jest zadeklarowana następująco:

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

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

UPDATE: Uwaga że zrobić MyApp.Web.Views importu poprzez web.config. Gdybym tego nie zrobił, to również mocno wpisane podejście (Inherits="MyView<T>") również nie działałoby.

Odpowiedz

1

Od innym poście: Oto podstawowa kwestia: parser strona ASP.NET nie obsługuje rodzajowych jako typ widoku

Czytaj więcej tutaj- Generic Inherited ViewPage<> and new Property

+0

Bardzo interesujące ... Nie przeczytałem jeszcze całego kodu na tej stronie, ale wygląda na to, że problem, który zgłosiłem, jest spowodowany przez niektóre ogólne/nietypowe juju, które są robione za kulisami. Jeśli uda mi się wykorzystać kod Justina do rozwiązania mojego problemu, opublikuję tutaj aktualizację. –

1

Możesz dodać swoją przestrzeń nazw dla elementu <namespaces> Twojego pliku web.config, to powinieneś być w stanie korzystać 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

_do_ importować obszar nazw tak. W przeciwnym razie mocno napisany widok [Inherits = "MyView [ModelType]"] również nie działa. –

+0

@Seth: Ale czy dodałeś przestrzeń nazw w web.config? –

Powiązane problemy