5

La lettura di this post qui su stackoverflow desidera caricare un css diverso durante la compilazione per la modalità di rilascio.La compilazione condizionale non funziona

Codice:

@{ #if (Debug) 
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 
#else 
<link href="@Url.Content("~/Content/Site-min.css")" rel="stylesheet" type="text/css" /> 
#endif 
} 

Tentativo 2

@{ #if (Debug) } 
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 
@{ #else } 
<link href="@Url.Content("~/Content/Site-min.css")" rel="stylesheet" type="text/css" /> 
@{ #endif } 

ho cercato di eseguire il debug in maiuscolo Ma nessun cambiamento non ha alcun effetto durante la compilazione di debug per rilasciare

+2

http://stackoverflow.com/questions/4696175/razor-view-engine-how-to-enter-preprocessorif-debug/4697570#4697570 ne dici di questo? – takepara

risposta

7

Secondo this SO post, se vuoi questo tipo di cose t o lavoro, puoi usare una proprietà nel tuo Modello per guidare le cose condizionali della Vista, così il C# imposta il valore booleano del Modello (IsDebug, o qualsiasi altra cosa) tramite la roba della direttiva del tempo di compilazione e la Vista si affida a questo.

Così il vostro modello finirebbe fare qualcosa di simile:

bool IsDebug = true; 

#if (!DEBUG) 
IsDebug = false; 
#endif 

e la vostra vista sarebbe fare qualcosa di simile:

@if(Model.IsDebug) 
{ 
} 
else 
{ 
} 

Si potrebbe anche usare ViewBag/Viewdata per contenere tale valore booleano troppo, ho supporre.


UPDATE:

Base sui vostri commenti, ecco qualcosa che potrebbe fanno:

Creare una nuova BaseController classe che eredita da Controller.

public abstract class BaseController : Controller 
{ 
    ... 
    protected BaseController() 
    { 
     bool indebug = false; 

     #if DEBUG 
     indebug = true; 
     #endif 

     ViewBag.InDebug = indebug; 
    } 
} 

e che i controller ereditino da questo anziché da Controller.

Poi, nel tuo _Layout.cshtml si potrebbe fare questo:

@if (ViewBag.InDebug) 
{ 
} 
else 
{ 
} 

Questo sembra funzionare OK.

+0

Il problema è che questo codice deve essere eseguito per tutte le pagine. Che cos'è un file CSS per tutte le pagine. Una volta che un controller ne ha solo uno può chiedere, dovrebbe mettere tutti i controller e quello che non volevo. Il codice è in _Layout.cshtml (layout principale) Perché non è possibile utilizzare la vista diretta? – ridermansb

+0

vedi le mie informazioni aggiuntive nella mia risposta - forse funzionerà anche per te. – itsmatt

Problemi correlati