5

閱讀this post這裏在stackoverflow想編譯發佈模式時加載不同的CSS。條件編譯不起作用

代碼:

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

嘗試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 } 

我試圖用大寫 來進行調試,但是沒有改變編譯調試到版本

+2

http://stackoverflow.com/questions/4696175/razor-view-engine-how-to-enter-preprocessorif-debug/4697570#4697570 這個怎麼樣? – takepara

回答

7

據時沒有任何影響this SO post,如果你想要這樣的事情在工作中,您可以使用模型中的屬性來驅動視圖的條件內容,因此C#通過編譯時指令來設置模型的布爾值(IsDebug,或其他),而視圖依賴於此。

所以,你的模型將最終做這樣的事情:

bool IsDebug = true; 

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

和您查看會做這樣的事情:

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

你也可以使用ViewBag /的ViewData來保存布爾值太大,我假設。


UPDATE:

基礎上您的意見,這裏的東西,你可以

創建一個新的BaseController類從Controller繼承。

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

     #if DEBUG 
     indebug = true; 
     #endif 

     ViewBag.InDebug = indebug; 
    } 
} 

並讓您的控制器繼承此而不是Controller。

然後在你的_Layout.cshtml你可以做到這一點:

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

這似乎是工作確定。

+0

問題是,應該爲所有頁面執行此代碼。 什麼是所有頁面的CSS文件。 一旦控制器只有一個人可能會問,將不得不把所有的控制器,我不想要的。 代碼位於_Layout.cshtml(主佈局) 爲什麼我不能使用Direct View? – ridermansb

+0

在我的答案中看到我的其他信息 - 也許它也適用於您。 – itsmatt