5

Czytanie this post tutaj na stackoverflow chcesz załadować różne css podczas kompilacji w trybie zwolnienia.Kompilacja warunkowa nie działa

Kod:

@{ #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 
} 

Próba 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 } 

Próbowałem debugować wielkimi literami Ale żadna zmiana nie ma wpływu podczas kompilacji Debug do wydania

+2

http://stackoverflow.com/questions/4696175/razor-view-engine-how-to-enter-preprocessorif-debug/4697570#4697570 Jak na ten temat? – takepara

Odpowiedz

7

Według this SO post, jeśli chcesz tego typu rzeczy o pracuj, możesz użyć właściwości w swoim Modelu, aby sterować warunkowymi obiektami View, więc C# ustawia boolean modelu (IsDebug lub coś w tym rodzaju) za pośrednictwem kompilacji dyrektyw dotyczących czasu kompilacji, a Widok polega na tym.

Więc twój model skończy robić coś takiego:

bool IsDebug = true; 

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

a View zrobiłby coś takiego:

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

Można także użyć ViewBag/ViewData uznać, że wartość logiczną też, ja przypuszczać.


UPDATE:

bazowa na wasze komentarze, oto coś mógłby temat:

Utwórz nowy BaseController klasę która dziedziczy z Controller.

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

     #if DEBUG 
     indebug = true; 
     #endif 

     ViewBag.InDebug = indebug; 
    } 
} 

i niech Twoje kontrolery odziedziczą po tym, a nie kontroler.

Następnie w _Layout.cshtml ty mógłby to zrobić:

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

To wydaje się działać OK.

+0

Problem polega na tym, że ten kod powinien zostać wykonany dla wszystkich stron. Co to jest plik CSS dla wszystkich stron. Gdy kontroler ma tylko jeden może zapytać, musiałby umieścić wszystkie kontrolery i nie chciałem. Kod znajduje się w _Layout.cshtml (układ główny) Dlaczego nie mogę korzystać z widoku bezpośredniego? – ridermansb

+0

zobacz moje dodatkowe informacje w mojej odpowiedzi - może to będzie działać również dla Ciebie. – itsmatt