2012-11-14 12 views
5

मेरे पास एक एएसपी.नेट एमवीसी वेब एप्लिकेशन है, जिसमें सभी पेज एक मास्टर Layout.cshtml पृष्ठ का उपयोग करते हैं। हालांकि मैं आमतौर पर RenderBody() करना चाहते हैं, मैं एक साइट बंद तंत्र है कि मेरे डेटाबेस में सक्रिय किया जा सकता है, तो मैं मूल रूप से एक लेआउट पेज ऐसा ही कुछ लग रहा है करना चाहते हैं:क्या रेंडरबॉडी() आवश्यकता के आसपास जाने का कोई तरीका है?

@if(DbHelper.SiteIsShutDown) { 
    <h1>Site is shut down temporarily</h1> 
} 
else { 
    <h1>Welcome to the site</h1> 
    @RenderBody() 
} 

मुसीबत यह है कि अगर SiteIsShutDown सच है, तो RenderBody() बुलाया नहीं प्राप्त करता है और मैं अपवाद:

"RenderBody" विधि लेआउट पेज के लिए बुलाया नहीं किया गया है ...

तो वहाँ एक तरह से मैं प्राप्त कर सकते है इस दौर में? मैं बस अपने लेआउट पेज से कुछ आउटपुट प्रस्तुत करना चाहता हूं, और मेरे दृश्य पृष्ठ से कुछ भी नहीं देना चाहता हूं।

उत्तर

-3

अंत मैं बहुत Jerad गुलाब के समाधान के लिए कुछ इसी तरह के साथ जाने का फैसला किया है लेकिन संशोधित तो यह सिर्फ जड़ SiteDisabled.htm कहा जाता है पर एक स्थिर फ़ाइल में कार्य करता है, और यह भी संशोधित इतना है कि यह एक अनंत रीडायरेक्ट लूप में जाने नहीं करता है जब साइट अक्षम किया गया है:

protected void Application_BeginRequest(object sender, EventArgs ea) { 
    string siteDisabledFilePath = "/SiteDisabled.htm"; 

    if (CachingAndUtils.IsSiteDisabled && HttpContext.Current.Request.FilePath != siteDisabledFilePath) { 
     HttpContext.Current.Response.Redirect(siteDisabledFilePath); 
    } 
} 
+2

अपने स्वयं के उत्तर के लिए मतदान वास्तव में अच्छा नहीं है, लेकिन जो भी कम शांत है, वह किसी अन्य व्यक्ति के उत्तर का उपयोग कर रहा है और इसे थोड़ा सा संशोधित कर रहा है, केवल एक अलग उत्तर देने के लिए ... –

5

आपको शायद विचारों को प्रस्तुत करने के लिए मास्टर लेआउट छोड़ना चाहिए, और साइट शटडाउन की स्थिति में आपके विचारों को शॉर्ट सर्किट नहीं करना चाहिए।

आप सबसे अच्छा शर्त हो Global.asax, यानी इस के लिए जाँच करने के लिए और संभाल यह BeginRequest में है:,

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    if(DbHelper.SiteIsShutDown) 
    { 
     HttpContext.Current.Response.Redirect("SiteDown"); 
    } 
} 
+0

क्या रीडायरेक्ट का उपयोग किए बिना "साइट शट डाउन" दृश्य प्रदर्शित करने का कोई तरीका होगा? – Jez

3

ध्यान दें कि आप वास्तव में "अनदेखा कर सकते हैं "सामग्री अगर आप वास्तव में डब्ल्यू चींटी करने के लिए। आम तौर पर आप अपने व्यू कोड में @RenderBody() लिखते हैं, जो शरीर की सामग्री का मूल्यांकन करता है, इसे HelperResult में चिपकाता है, और उसके बाद आउटपुट स्ट्रीम में लिखता है। ऐसा करने में, एमवीसी शरीर को प्रस्तुत करने के रूप में चिह्नित करता है। आप @{ RenderBody(); } (ब्रेसिज़ नोटिस) लिखकर या RenderBody(); लिखकर किसी भी कोड संदर्भ में वास्तव में कुछ लिखने के बिना शरीर को प्रस्तुत करने के बारे में सोचने में यह सोच सकते हैं। यह वास्तव में आउटपुट स्ट्रीम को लिखने के बिना शरीर की सामग्री का मूल्यांकन करता है।

संबंधित मुद्दे