2010-11-05 21 views
61

En mi carpeta "raíz" Vistas, tengo una _ViewStart con el siguiente código:¿Cómo uso un _ViewStart común en áreas?

@Code 
    Layout = "~/Views/Shared/_Layout.vbhtml" 
End COde 

en mi área/carpeta pública/Vistas, tengo una copia de mi _ViewStart desde la carpeta raíz Vistas.

Pero cuando corro el código, me sale este error:

Unable to cast object of type 'ASP._ViewStart_vbhtml' to type 'System.Web.WebPages.StartPage'. 

no sé lo que estoy haciendo mal?

¿Puedo usar uno _ViewStart.vbhtml para mis áreas también?

¿Cómo puedo usar _ViewStart.vbhtml en áreas?

Respuesta

51

tiene que copiar el archivo ~\Views\Web.config (o al menos los siguientes elementos de configuración) en la zona de su Ver Web.Config:

<configSections> 
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
    <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> 
    <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> 
    </sectionGroup> 
</configSections> 

<system.web.webPages.razor> 
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <pages pageBaseType="System.Web.Mvc.WebViewPage"> 
    <namespaces> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Routing" /> 
    </namespaces> 
    </pages> 
</system.web.webPages.razor> 
+5

¡Guau, gracias! Nunca hubiera encontrado esta solución yo mismo. Gracias por tomarse el tiempo para ayudarme, me salvaste de sacarme los últimos tres pelos. :) ¡¡¡Gracias de nuevo!!! – MojoDK

+1

Me alegro de poder ayudar. Estamos estudiando la posibilidad de hacer que este mensaje de error sea más inteligente para que señale cuál es el problema. – marcind

32

Cuando me encontré con este problema, me encontré con esta respuesta, pero lo primero Realmente quería estaba en http://stevescodingblog.co.uk/asp-net-mvc-3rc-areas-viewstart/.

La esencia del problema es que _ViewStart. ** html tiene un alcance. Se aplicará a cualquier vista que esté en el mismo nivel o en subcarpetas debajo de ella. Por lo tanto, si lo mueve al directorio base (por ejemplo, al lado del archivo Global.asax), se aplicará a todas las vistas bajo ~/Views/* y todas las vistas en ~/Areas/*/Views/*.

Similar a la respuesta aceptada, igual tendrá que copiar las secciones <system.web.webPages.razor> y <sectionGroup name="system.web.webPages.razor"..>. Colóquelos en su archivo base web.config (en la raíz del proyecto).

Aquí hay un more complete tutorial.

Para obtener puntos de bonificación, puede anular la configuración de _ViewStart. ** html creando un archivo nuevo más cercano a la vista en cuestión (por ejemplo, el archivo ~/Views/_ViewStart.cshtml sobrescribirá ~/_ViewStart.cshtml para todas las vistas en el directorio ~/Views /).

+0

Estoy teniendo el mismo problema que MojoDK. Tan pronto como muevo el archivo _ViewStart al directorio raíz recibo este error. Tengo esas dos secciones en cada web.config, incluida la raíz (en la subsección de tiempo de ejecución, en cualquier otro lugar y no me permitirá depurar). ¿Podría haber algo más para configurar esto? –

+2

Sólo dio la vuelta, respuesta agradable, @havok me encontré con que tenemos que poner esta appsettings así: Benedict

+1

Si todavía obtener el error "emitir" después de hacer todo lo anterior, puede ser causado por el _ViewStart.cshtml que se almacena en caché. Simplemente abra el archivo y haga algo para cambiar la marca de tiempo para que vuelva a compilar.Eso lo solucionó para mí. – grahamesd

0

me encontré con que se mueve _ViewStart a la raíz y la adición de la sección system.web.webPages.razor a la configuración web raíz trabajó, sin embargo yo también tenía que añadir una serie de líneas similares a este < < complemento namespace =" Ico.Logics.Web.Areas.Admin.Models "/ >> a la sección copiada.

Cuestiones relacionadas