2008-10-09 15 views
7

जब मैं मास्टरपेज का उपयोग करने वाली वेबसाइट पर नेविगेट करता हूं, तो क्या एप्लिकेशन जानता है कि मैं किस पृष्ठ पर हूं? यदि हां, तो क्या यह उस ऑब्जेक्ट में संग्रहीत करता है जिसे मैं एक्सेस कर सकता हूं?क्या मास्टरपेज जानता है कि कौन सा पृष्ठ प्रदर्शित किया जा रहा है?

कारण मैं पूछ रहा हूँ है तो मैं इस जगह ले सकता है:

//masterpage 
<div id="nav_main"> 
    <ul><asp:ContentPlaceHolder ID="navigation" runat="server">      
    </asp:ContentPlaceHolder></ul> 
</div> 

//content page(s) 
<asp:Content ContentPlaceHolderID="navigation" ID="theNav" runat="server"> 
    <li><a href="default.aspx">Home</a></li> 
    <li id="current"><a href="faq.aspx">FAQ</a></li> 
    <li><a href="videos.aspx">Videos</a></li> 
    <li><a href="#">Button 4</a></li> 
    <li><a href="#">Button 5</a></li> 
</asp:Content> 
नेविगेशन, जो सूची आइटम के आईडी सेट करने का "वर्तमान" होने से पृष्ठ के लिए लिंक पर प्रकाश डाला गया के लिए एक अधिक सुरुचिपूर्ण समाधान के साथ

। वर्तमान में प्रत्येक पृष्ठ ने अपने संबंधित लिंक के आईडी सेट के साथ नेविगेशन को वर्तमान में सेट किया है।

+0

तुम कृपया इसे और अधिक स्पष्ट रूप से आप क्या कर रहे हैं स्पष्ट किया जा सका करने का प्रयत्न? – liggett78

+0

हां, अद्यतन प्रश्न उम्मीदपूर्वक अधिक जानकारी देगा। – Anders

उत्तर

13

मैं क्रिस के साथ सहमत हूं: इस मेनू के प्रदर्शन को संभालने के लिए नियंत्रण का उपयोग करें और यह सुनिश्चित करें कि किस लिंक को हाइलाइट किया जाना चाहिए। यहां एक विधि है जिसका मैं नियमित रूप से उपयोग करता हूं। यह अधिक जटिल हो सकता है यदि आपके पास कई पेज हैं जो एक ही लिंक को अलग-अलग स्टाइल की आवश्यकता होगी, लेकिन आपको विचार मिलता है।

Dim thisURL As String = Request.Url.Segments(Request.Url.Segments.Count - 1) 
Select Cast thisUrl 
    Case "MenuItem1.aspx" 
     lnkMenu1.CssClass = "Current" 
    Case "MenuItem2.aspx" 
     lnkMenu2.CssClass = "Current" 
End Select 
+1

धन्यवाद! आपके कोड ने मुझे समस्या के अंतिम समाधान के लिए एक विचार दिया। – Anders

0

आपको पृष्ठ प्रॉपर्टी तक पहुंचने से पृष्ठ प्राप्त करने में सक्षम होना चाहिए। आईई:

string type = this.Page.GetType().Name.ToString(); 
8

मास्टर पृष्ठ के भीतर से वर्तमान अनुरोध यूआरएल आप क्या करेंगे पाने के लिए:

string s = this.Page.Request.FilePath; // "/Default.aspx" 

मैं भी गुरु में अपने नेविगेशन चलती की सिफारिश सामग्री पृष्ठ के बजाय पृष्ठ। इससे इसे बनाए रखना/एक्सेस करना आसान हो जाएगा।

-1

नेविगेशन नियंत्रण, मास्टर पेज नहीं, वर्तमान में किस पृष्ठ पर हाइलाइट किया गया है इसका प्रभारी होना चाहिए।

या तो जो पृष्ठ लोड किया गया है उसे नेविगेशन आइटम को सूचित करना चाहिए, या एनएवी नियंत्रण को स्वयं इसका ट्रैक रखना चाहिए।

बिंदु यह है कि मास्टर पेज को धारक माना जाता है कि सामग्री प्रदर्शित होती है। उन्हें कुछ भी नियंत्रित नहीं करना चाहिए।

+0

मैं नेविगेशन नियंत्रण का उपयोग नहीं कर रहा हूं, यह सिर्फ एक स्टाइल सूची है। – Anders

0

आप वर्तमान में सेट करने के लिए मास्टर पेज के भीतर से केवल Request path में से एक का उपयोग करेंगे। मेरे पास मास्टर पेज पर एक संपत्ति भी ओवरराइड करने के लिए होगी, ताकि लिंक या कुछ के बिना पेज इसे उचित पर सेट कर सकें।

-1

कोशिश

this.Page.Master 

यह आप वर्तमान पृष्ठ के मास्टर पृष्ठ मिल जाएगा।

2

हां, अपनी मास्टर फ़ाइल में नीचे दिए गए कोड का उपयोग करें। यह आपको सामग्री पृष्ठ का नाम देगा।

Page.ToString().Replace("ASP.","").Replace("_",".") 
0

यह मेरे लिए इस तरह से काम किया है - धन्यवाद जारेड

यह है कि मैं क्या पेज है कि हम देख रहे हैं के लिए मौजूदा मेनू आइटम को उजागर करने के हमारे एनएवी मेनू पाने के लिए किया था। कोड मास्टर पेज में है। आपको मूल रूप से फ़ाइलपैथ (जेरेड का रास्ता) मिलता है हम अपने लिंक में "~" का उपयोग करते हैं, इसलिए मुझे इसे बाहर करना पड़ा। मेन्यू नियंत्रण का मेनू मेनू संग्रह Iterate। नेविगेट यूआरएल संपत्ति की तुलना करें।

(मैं सबसे अच्छा सांकेतिक शब्दों में बदलनेवाला और भी बदतर समझा पर नहीं कर रहा हूँ - लेकिन यह काम करता है और मैं इसके साथ काफी chuffed था)

protected void HighlightSelectedMenuItem() 
    { 
     string s = this.Page.Request.FilePath; // "/Default.aspx" 
     string nav; 
     if (s.Contains("~")) 
     { 
      s = s.Remove(s.IndexOf("~"), 1); 
     } 

     foreach (MenuItem item in navMenu.Items) 
     { 
      if (item.NavigateUrl.Contains("~")) 
      { 
       nav = item.NavigateUrl.Remove(item.NavigateUrl.IndexOf("~"), 1); 
       if (s == nav) 
       { 
        item.Selected = true; 
       } 
      } 

     } 
    } 
0
string s = this.Page.GetType().FullName; 
string[] array = s.Split('_'); 
int count = array.Count<String>(); 
string currentPage = array[count - 2]; 
+3

स्पष्टीकरण उन्हें बहुत मदद करेगा –

+0

यदि आपके पास दो .aspx पृष्ठ हैं जो समान कोड साझा करते हैं तो यह समाधान काम नहीं करेगा। –

+0

आपके द्वारा उल्लिखित चीजों के लिए धन्यवाद। –

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

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