2010-04-21 9 views
7

En mis aplicaciones MVC normalmente declaro un tipo de vista base del que heredan todas mis vistas. Aparece un error de analizador cuando especifico Inherits="MyView" en la declaración de mi página, pero no si especifico Inherits="MyApp.Web.Views.MyView".En ASP.NET MVC, ¿por qué no puedo heredar de "MyCustomView" sin especificar el nombre de tipo completo?

Curiosamente, funciona bien si especifico un nombre de vista fuertemente tipado: Inherits="MyView<T> (donde T es cualquier tipo válido).

¿Por qué puedo especificar una vista fuertemente tipada sin el nombre de tipo completo, pero no una vista genérica?

Mi clase de vista de base se declara así:

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

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

ACTUALIZACIÓN: en cuenta que yo hago MyApp.Web.Views de importación a través de web.config. Si no lo hice, entonces el enfoque fuertemente tipado (Inherits="MyView<T>") tampoco funcionaría.

Respuesta

1

De otro post: Aquí está la cuestión de fondo: el analizador de páginas ASP.NET no soporta los genéricos como un tipo de página

más aquí- Generic Inherited ViewPage<> and new Property

+0

Muy interesante ... Todavía no he leído todo el código de esa página, pero parece que el problema que he informado es causado por algunos de los juju genéricos/no genéricos que se realizan detrás de las escenas. Si logro utilizar el código de Justin para resolver mi problema, publicaré una actualización aquí. –

1

Usted puede agregar el espacio de nombres al elemento <namespaces> de su archivo web.config, entonces debería ser capaz de utilizar 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_ importe el espacio como este. De lo contrario, la vista fuertemente tipada [Inherits = "MyView [ModelType]"] tampoco funcionaría. –

+0

@Seth: ¿Pero, ha agregado el espacio de nombres en el archivo web.config? –

Cuestiones relacionadas