5

Đọc this post ở đây trên stackoverflow muốn tải một css khác khi biên dịch cho chế độ phát hành.Biên dịch có điều kiện không hoạt động

Code:

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

Cố gắng 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 } 

tôi đã cố gắng để gỡ lỗi viết hoa Nhưng không có sự thay đổi không có tác dụng khi biên dịch Debug để Thả

+2

http://stackoverflow.com/questions/4696175/razor-view-engine-how-to-enter-preprocessorif-debug/4697570#4697570 Làm thế nào về điều này? – takepara

Trả lời

7

Theo this SO post, nếu bạn muốn điều này t o làm việc, bạn có thể sử dụng một thuộc tính trong Model để điều khiển các công cụ điều kiện của View, vì vậy C# thiết lập boolean của Model (IsDebug hoặc bất kỳ thứ gì) thông qua các công cụ biên dịch thời gian biên dịch và View dựa vào đó.

Vì vậy, mô hình của bạn sẽ kết thúc làm một cái gì đó như:

bool IsDebug = true; 

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

và Xem của bạn sẽ làm điều gì đó như:

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

Bạn cũng có thể sử dụng ViewBag/ViewData để cho rằng giá trị boolean quá, tôi giả sử.


UPDATE:

Căn cứ vào ý kiến ​​của bạn, đây là một cái gì đó bạn có thể làm:

Tạo một lớp mới BaseController mà kế thừa từ Controller.

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

     #if DEBUG 
     indebug = true; 
     #endif 

     ViewBag.InDebug = indebug; 
    } 
} 

và để Bộ điều khiển kế thừa từ bộ điều khiển này thay vì Bộ điều khiển.

Sau đó, trong _Layout.cshtml của bạn, bạn có thể làm điều này:

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

Điều này dường như làm việc OK.

+0

Vấn đề là mã này nên được thực hiện cho tất cả các trang. Tệp CSS cho tất cả các trang là gì. Sau khi một bộ điều khiển chỉ có một người có thể hỏi, sẽ phải đặt trong tất cả các bộ điều khiển và tôi không muốn. Mã nằm trong _Layout.cshtml (bố cục chính) Tại sao tôi không thể sử dụng Chế độ xem trực tiếp? – ridermansb

+0

xem thông tin bổ sung của tôi trong câu trả lời của tôi - có lẽ nó cũng sẽ làm việc cho bạn. – itsmatt

Các vấn đề liên quan