2011-02-18 9 views
10

में एक बेस पेज क्या आप विजुअल स्टूडियो में बनाई गई हर वेबसाइट से अनुशंसा करते हैं, कि आपको मूल पृष्ठ के रूप में कार्यरत एक बेस पेज बनाना चाहिए?ASP.NET

सटीक लाभ/कमी क्या हैं?

+0

कुछ उत्तरों को स्वीकार करने का समय! – ScottE

+0

मुझे नहीं लगता कि मैं अभी तक एक जवाब दे रहा हूं। – TeaDrinkingGeek

उत्तर

10

यदि आप एएसपी.NET कार्यों में कुछ तरीके से ओवरराइड करना चाहते हैं, तो यह प्रत्येक पृष्ठ में कोड को शामिल करने के बजाय इसे बेस क्लास में बनाने के लिए और अधिक कुशल हो सकता है। दो विशिष्ट उदाहरण मैं इस जहां किया है कर रहे हैं:

IsPostBack
लिटिल ज्ञात तथ्य: यह एक अनुरोध है कि, ASP.NET करने के लिए, एक पोस्टबैक की तरह दिखता है, लेकिन एक GET अनुरोध के साथ प्रस्तुत किया जाता है शिल्प के लिए काफी संभव है । यह कौन करता है हैकर्स, वह कौन है। इस मामले में IsPostback पर एक कॉल true लौटाएगा, लेकिन यह वास्तव में false लौटता है। इस दौर पाने के लिए, एक आधार वर्ग कि IsPostBack ओवरराइड करता है निर्माण:

Public Class MyBase 
    Inherits System.Web.UI.Page 
    <DebuggerStepThrough()> _ 
    Public Shadows Function IsPostback() As Boolean 

     'Check the built-in IsPostback and make sure this is a HTTP POST 
     Return (Page.IsPostBack AndAlso Request.HttpMethod.ToUpper = "POST") 

    End Function 

End Class 

हैंडलिंग
Beginning ASP.NET Security में, इस तथ्य के बारे में बात करती है Blowdart त्रुटि है कि आप एक कस्टम के लिए ग्राहक रीडायरेक्ट करने के लिए से निपटने ASP.NET के त्रुटि का उपयोग करता है, तो त्रुटि पृष्ठ, हैकर (दोबारा) पुनर्निर्देशन का पता लगा सकते हैं और इसे एक त्रुटि के रूप में चिह्नित कर सकते हैं जो शोषक हो सकता है। पृष्ठ की त्रुटि ईवेंट को संभालने और सर्वर करने के लिए एक और अधिक सुरक्षित पैटर्न है। ट्रांसफर (जो क्लाइंट को कुछ भी नहीं भेजता है)। दोबारा, बेस क्लास में ऐसा करने का मतलब है कि आप केवल एक बार कोड लिखते हैं:

public partial MyBase : System.Web.UI.Page 
{ 
    protected void Page_Error (object sender, EventArgs e) 
    { 
     Exception ex = Server.GetLastError(); 

     // Do something with the exception e.g. log it 
     ... 

     Server.Transfer("~/mycustomerrorpage.aspx"); 
    } 
} 
+1

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन भविष्य में जो लोग इस उत्तर का उल्लेख कर सकते हैं, मैं इसे बेहतर जोड़ दूंगा। मैं पृष्ठ बेस क्लास 'पेज_इरर इवेंट हैंडलर पर त्रुटि प्रबंधन नहीं डालूंगा। मैं इसे global.asax एप्लिकेशन_इरर इवेंट हैंडलर में डाल दूंगा। इस तरह से कोई भी त्रुटि पकड़ी जाती है और इस पर ध्यान दिए बिना कि पृष्ठ आपकी बेस क्लास का उपयोग करता है या नहीं। – AgapwIesu

1

मास्टरपेज देखें यह उनका प्राथमिक उद्देश्य है। http://msdn.microsoft.com/en-us/library/wtxbf3hh.aspx

यह आपकी साइट के लिए टेम्पलेट के रूप में काम करेगा:

यहाँ एक लिंक भी है। आप एक सामग्री अनुभाग जोड़ देंगे जो आपकी साइट के शरीर को बनाएगा। आप मास्टर पेज का संदर्भ दे सकते हैं अपने उपपृष्ठों के लिए आपके साइट के लिए एक सतत लेआउट, मेनू इत्यादि।

इसके अलावा, जैसे अन्य लोगों ने ध्यान दिया है। यदि आप किसी भी कमांड कोड चला रहे हैं, तो बस एक वर्ग को एक संदर्भ बनाएं जहां से आपको इसकी आवश्यकता हो।

+0

मुझे पता है कि मास्टर पेज क्या करते हैं। मैं एक बेस पेज के बारे में बात कर रहा हूं, जो एक वेब क्लास और वेब पेज के बीच बैठ सकता है। – TeaDrinkingGeek

0

यदि आपको पृष्ठ वर्ग से संबंधित सभी पृष्ठों पर सामान्य कार्यक्षमता की आवश्यकता है, तो एक सामान्य बेस क्लास बनाएं।

यदि आपको अपने सभी पृष्ठों पर ऐसी सामान्य कार्यक्षमता की आवश्यकता नहीं है, तो सामान्य बेस क्लास न बनाएं।

आप तय नहीं कर सकते एक आधार वर्ग किसी को चोट करने के लिए नहीं जा रहा है हो रही है, तो आप के रूप में अच्छी हो सकता है एक (मैं आप कहते हैं कि अधिक बार नहीं की तुलना में कुछ सामान्य कार्यक्षमता की आवश्यकता होगी, में पहुंचते हैं)

4

हाँ, मैं करता हूं।

लेकिन कृपया याद रखें कि एक आधार पेज के प्रयोजन के एक मास्टर पृष्ठ के प्रयोजन से पूरी तरह से अलग है।

मुझे समझाएं।

मास्टर पृष्ठों

लेआउट कि गुरु के जुड़े हुए हैं सभी पृष्ठों पर उसी चित्रमय सुविधाओं और webforms व्यवहार का हिस्सा (लगता है के साथ कोड-पीछे कि प्रवेश करें/लॉगआउट बॉक्स) साझा करने के लिए इस्तेमाल किया तत्व हैं। आपकी अंतिम पेज वर्गों शामिल होंगे मास्टर पेज के लिए एक संदर्भ तो अंतिम परिणाम मास्टर पृष्ठ अपने पेज सहित रूप में दिखाई देगा

बेस पृष्ठों

(बताने के लिए कौन किसे शामिल स्रोत कोड की जांच) क्या हैं (अमूर्त? कम से कम सील नहीं!) कक्षाएं जिनमें से आपके सभी पृष्ठ कोड-पीछे दृश्य से प्राप्त होते हैं। जब तक आप स्पष्ट रूप से और प्रोग्रामेटिक रूप से बेसए पृष्ठ पर नियंत्रण जोड़ें, यानी। LoadControl विधि के माध्यम से कन्स्ट्रक्टर में, जब तक आप कोड जोड़ नहीं लेते हैं, तब तक सभी पृष्ठ बहुत शुरुआत से खाली दिखाई देंगे।

लेकिन अक्सर वे उपयोगी होते हैं। यदि आप कुछ बेस क्लास विधियों को ओवरराइड करना चाहते हैं, तो आप सभी पृष्ठों पर ओवरडिन व्यवहार साझा कर सकते हैं। या, आप एप्लिकेशन-विशिष्ट ऑब्जेक्ट्स को बच्चों के पृष्ठों (डेटा एक्सेस लेयर का संदर्भ, लॉगर या जो कुछ भी) में बेनकाब करना चाहते हैं। कुकीज से उपयोगकर्ता-पसंदीदा भाषा को पुनर्प्राप्त करने के लिए एक उदाहरण UICulture संपत्ति ओवरराइड कर रहा है।

दोनों

जोड़ा जा सकता है अपने लक्ष्यों के आधार पर आप आधार पृष्ठों के साथ मास्टर पृष्ठों को संयोजित कर सकते हैं।

मैं हमेशा करने के लिए आप का सुझाव के बाद से आपके आवेदन की आवश्यकताओं समय के साथ बदल और आप पहले से ही बहुत से पृष्ठों को बनाया है, तो संशोधनों सभी पृष्ठों पर प्रचारित करने के लिए आधार वर्ग को संशोधित करने की कोशिश कर सकते हैं, एक आधार पेज वर्ग बनाने के लिए, उनकी जटिलता के स्तर के अनुसार।

+1

मास्टर पेजों के बारे में कुछ भी किसने कहा? – Lazarus

+2

मैट मास्टर पेज के बारे में जवाब दिया। मेरा जवाब दूसरे को पूरा करता है –

1

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

मास्टर पृष्ठ:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="MyProject.master.cs" 
     Inherits="MyProject.MasterPages.MyProject" %> 

    <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> 
    </asp:ContentPlaceHolder> 

बेस पृष्ठ:

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPages/MyProject.Master" 
    AutoEventWireup="true" CodeBehind="BasePage.aspx.cs" 
     Inherits="MyProject.BasePage" %> 

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" 
    runat="server"> 
</asp:Content> 

एक मास्टर पेज परिदृश्य में इस्तेमाल के लिए एक आधार के पृष्ठ बनाने के लिए, आप निम्न संरचना इस्तेमाल कर सकते हैं

सामग्री पृष्ठ:

<%@ Page Title="MyProject - Home" Language="C#" 
    MasterPageFile="~/MasterPages/MyProject.Master" AutoEventWireup="true" 
     CodeFileBaseClass="MyProject.BasePage" CodeFile="Default.aspx.cs" 
      Inherits="MyProject.Default" 
       Meta_Description="Code Snippet: Master Page and Base Page" 
        Meta_Keywords="master, base, content" Theme="Style" %> 

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" 
    runat="server"> 
</asp:Content>