2011-02-06 11 views
7

VS2010 Ultimate, ASP.NET MVC 3 con rasoio.ASP.NET MVC3 Razor: perdita di intelligenza quando si posiziona la vista in una posizione alternativa?

Ho creato un motore di visualizzazione personalizzata nella mia app che permette MVC3 aree nidificate, in questo modo

~/areas/admin 
    /marketing 
     /views 
      index  
     /controllers 
      marketingController 
     /email 
      /views 
       index 
       ... 
      /controllers 
       emailController 
     /templates 
      /views 
       index 
       edit 
       ...     
      /controllers 
       templatesControler 

ecc

Tutto questo funziona bene, tranne che per mi sembra di aver perso IntelliSense in viste che non si trovano nella posizione standard ~/areas/area_name/views/myview.cshtml.

Qualche suggerimento?

Aggiornamento

solo per scherzo, ho aggiunto una dichiarazione @inherits

@inherits System.Web.Mvc.WebViewPage<Namespace.Models.Class> 

e intellisense iniziato a lavorare. Ho quindi cancellato la dichiarazione, e lo continua a funzionare.

C'è qualche impostazione nel file di progetto o qualcosa che dice a Visual Studio che tipo di intellisense applicare a un file aperto, diverso dall'estensione del file? (Se l'estensione era tutto ciò che è stato usato, mi aspetterei che fosse molto più coerente).

Aggiornamento 2

Mentre l'aggiunta di un web.config per ciascuno dei miei vista cartelle risolve il problema abbastanza bene, mettendo la configurazione rasoio nel web.config radice non lo fa.

Dopo aver aggiunto il system.web.webPages.razor sezione richiesta per ~/web.config,

  1. aggiungo un rasoio .cshtml file di vista uno dei miei nidificate cartelle vista.
  2. Intellisense funziona.
  3. Rinominare il file (mantenendo l'estensione .cshtml)
  4. L'evidenziazione Intellesense e la sintassi smettono di funzionare.
  5. Chiudo il file rinominato e lo riaplo: tutto riprende a funzionare.
  6. Oppure, invece di chiudere e riaprire il file, lo rinominare con il nome originale, riprende a funzionare.

Questo sembra un errore VS: rinominare un file (ma mantenendo l'estensione corretta) non dovrebbe, per quanto posso dire, causare questo tipo di comportamento. Continuerò a inserire i singoli web.config in ciascuna delle mie cartelle di visualizzazione dal momento che corregge il problema, ma è fastidioso dover ingombrare la soluzione quando mi aspetterei che queste impostazioni si propagassero attraverso l'albero delle soluzioni mentre le altre impostazioni di web.config .

Vale anche la pena notare che, indipendentemente da dove si trova la configurazione del rasoio, il sito continua a funzionare correttamente indipendentemente dal fatto che intellesense funzioni o no.

Risolto

mi è stato comunicato (incredibilmente in fretta) da parte dei poteri forti che si trattava di un problema noto che è corretto in MVC3 RTM e VS2010 SP1. Il problema è scomparso dopo l'aggiornamento della mia installazione MVC3 e l'aggiunta di SP1.

+0

Hai ragione; sembra un bug VS Invia un'email a [email protected] – SLaks

+0

Lo farà. Finalmente una ragione per andare a vedere l'Oracle. –

risposta

7

La cartella Viste contiene un Web.config file that sets default options for Razor views, inclusi il tipo di base e gli spazi dei nomi predefiniti, nonché un host personalizzato che abilita la direttiva @model.

Le visualizzazioni del rasoio in una cartella diversa non ereditano questa configurazione.
È necessario aggiungere questa configurazione per un Web.config nella cartella:

<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> 
+0

Chiamata eccellente, correzione rapida, anche se non capisco perché queste impostazioni non si propagano dal web.config di root. Qualche intuizione? –

+0

La configurazione Web di root non ha queste impostazioni definite. Ma potresti sempre aggiungerli tu stesso. – marcind

+0

@David: vengono aggiunti a 'Views/Web.config' per evitare di rompere le pagine non MVC in altre cartelle. – SLaks

Problemi correlati