2010-11-05 10 views
61

Nella mia cartella "root" Visualizzazioni, ho un _ViewStart con il seguente codice:Come utilizzare un _ViewStart comune nelle aree?

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

nella mia zona/cartella Pubblica/Vista, ho una copia del mio _ViewStart dalla cartella principale Vista.

Ma quando si esegue il codice, ottengo questo errore:

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

Non so cosa sto facendo male?

Posso utilizzare uno _ViewStart.vbhtml anche per le mie aree?

Come è possibile utilizzare _ViewStart.vbhtml in aree?

risposta

51

è necessario copiare il file ~\Views\Web.config (o almeno i seguenti elementi di configurazione) in del vostro Area View 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

Wow grazie amico! Non avrei mai trovato questa soluzione da solo. Grazie per aver dedicato del tempo ad aiutarmi, mi hai appena salvato dal tirare fuori i miei ultimi tre capelli. :) Grazie ancora!!! – MojoDK

+1

Contento di aver potuto aiutare. Stiamo cercando di rendere questo messaggio di errore più intelligente in modo che indichi qual è il problema. – marcind

32

Quando mi sono imbattuto in questo problema, mi sono imbattuto in questa risposta prima ma cosa Volevo davvero era su http://stevescodingblog.co.uk/asp-net-mvc-3rc-areas-viewstart/.

Il nocciolo del problema è che _ViewStart. ** html ha un ambito. Si applicherà a qualsiasi vista che si trova sullo stesso livello o in sottocartelle sotto di essa. Pertanto, se lo si sposta nella directory di base (ad esempio accanto al file Global.asax), verrà applicato per tutte le viste sotto ~/Views/* e tutte le viste sotto ~/Aree/*/Viste/*.

Analogamente alla risposta accettata, sarà comunque necessario copiare le sezioni <system.web.webPages.razor> e <sectionGroup name="system.web.webPages.razor"..>. Inseriscili nel tuo file web.config di base (nella radice del progetto).

Ecco uno more complete tutorial.

Per i punti bonus, è possibile sovrascrivere le impostazioni di _ViewStart. ** html creando un nuovo file più vicino alla vista in questione (ad esempio il file ~/Views/_ViewStart.cshtml sovrascriverà ~/_ViewStart.cshtml per tutte le viste nella directory ~/Views /).

+0

Ho lo stesso problema di MojoDK. Non appena sposto il file _ViewStart nella directory radice, ricevo questo errore. Ho queste due sezioni in ogni web.config inclusa la root (sotto la sottosezione di runtime - ovunque e non mi permetterà di eseguire il debug). Potrebbe esserci qualcos'altro per sistemarlo? –

+2

appena arrivato intorno, bella risposta, @havok ho scoperto che dobbiamo mettere questo appSettings così: Benedict

+1

Se ancora ottenere l'errore "cast" dopo aver fatto tutto quanto sopra può essere causato da _ViewStart.cshtml in fase di memorizzazione nella cache. Basta aprire il file e fare qualcosa per modificare il timestamp in modo che ricompaia.Questo lo ha risolto per me. – grahamesd

0

ho trovato che spostando _ViewStart alla radice e aggiungendo la sezione system.web.webPages.razor alla configurazione principale Web lavorato, comunque anche avevo bisogno di aggiungere una serie di linee simili a questo < < metti namespace =" Ico.Logics.Web.Areas.Admin.Models "/ >> alla sezione copiata.

Problemi correlati