2014-03-03 7 views
10

enthalten Ich habe eine Teilansicht, die nur grundlegende HTML, kein Rasierer-Code oder Modell enthält. Ich verwende dies, um einige "Anleitungen" für das Seitenlayout einzurichten.Eine partielle Ansicht bedingte basierend auf Debug oder Produktion in ASP.NET MVC-Site

Was wäre der richtige/einfachste Weg, nur diese partiellen einzuschließen, wenn die Site im Debug-Modus ausgeführt wird?

Ich weiß, dass ich in meinem kompilierten Code Anweisungen in meinem C# Code verwenden konnte, um Abschnitte einzuschließen. Gibt es etwas Ähnliches im Rasierer?

+1

Ich würde vorschlagen, [Konfiguration transformieren] (http://msdn.microsoft.com/en-us/library/dd465318%28v=vs.100%29.aspx). Fügen Sie einfach einen Appsetting-Wert in Ihre web.config ein. – tweray

+1

Sie könnten eine View-Variable definieren und sie in Ihrem kompilierten Code basierend auf '#if DEBUG' auf 'True' setzen und dann den Wert basierend auf dieser Variablen festlegen. –

Antwort

13

Sie können HttpContext.Current.IsDebuggingEnabled verwenden, die web.config s'Debug-Einstellung überprüfen würde:

@if(HttpContext.Current.IsDebuggingEnabled) { 
    //Do something here. 
} 

OR ein Verlängerungshilfsmethode:

public static Boolean DEBUG(this System.Web.Mvc.WebViewPage page) { 
// use this sequence of returns to make the snippet ReSharper friendly. 
#if DEBUG 
     return true; 
#else 
     return false; 
#endif 
} 

und Nutzung :

@if(DEBUG()) { 
    //debug code here 
} else { 
    //release code here 
} 
+0

für die Erweiterungsmethode, ich denke, es wäre besser, nur wahr in der '#if DEBUG' zurückgeben und rechts später falsch zurückgeben. Es scheint keine Notwendigkeit zu geben, eine Variable zuzuweisen. –

+0

Sie haben Recht. Vielen Dank. Ich habe gerade etwas zur Arbeit geschrieben. update antwort mit einem Code-Snippet, das auch mit Nachschärfer kompatibel ist: D –

+1

Die erste Lösung passt perfekt zu meinen Bedürfnissen. Vielen Dank –

1

Meine schnelle Antwort (das ist, was tun könnte):

wie dies eine web.config Abschnitt erstellen:

<appSettings> 
    <add key="InProduction" value="true" /> 
</appSettings> 

Dann überprüfen:

System.Configuration.Configuration rootWebConfig1 = 
    System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(null); 
if (rootWebConfig1.AppSettings.Settings.Count > 0) 
{ 
    bool inProd = rootWebConfig1.AppSettings.Settings["InProduction"]; 
} 

dann einen viewbag Variable basierend auf der bool und zeigen Sie in Ihrer Razor Ansicht:

ViewBag.ShowPartial = inProd; 

Razor:

@if (ViewBag.ShowPartial) 
{ 
    @Html.Partial("MyProductionPartial") 
} 
0

Sie können eine statische Eigenschaft in einer Klasse machen:

public static class Foo 
{ 
    public static bool IsDebugMode {get; set;} 
} 

... und dann in Ihrer Global.asax.cs Datei, auf bis starten, Sie so etwas tun könnten:

#if DEBUG 
    Foo.IsDebugMode = true; 
#endif 

... dann könnten Sie in Ihren Ansichten nach Foo.IsDebugMode suchen (möglicherweise müssen Sie eine Referenz hinzufügen).

Oder ... wenn Sie Ihre ViewPage-Klasse überschrieben haben, können Sie sie als Eigenschaft hinzufügen ... sieht so aus, als ob sie gehört. :)

Verwandte Themen