2009-12-14 2 views
1

В моем веб-приложении (asp.net C#) У меня есть меню как «Все», «Образование», «Развлечения», «Комедия». Я хочу, чтобы при выборе «Все» он должен отображаться как текущее меню, для которого у меня есть текущий класс CSS.Как выбрать текущее меню на главных страницах?

В случае WebUserControls я могу сделать это легко, передавая параметр текущей страницы, чтобы выбрать, как показано ниже:

mywebpage.aspx

<uc:header ID="header1" runat="server" selectedMenu="comedy" /> 

header.ascx (код (C#))

public string selectedMenu 
{ 
    get { return strSelected; } 
    set { strSelected = value; } 
} 

header.ascx (HTML)

<ul> 
    <li><a href="/all/" title="All Videos" <%if (strSelected == "all"){%>class="current"<%} %>><span>All</span></a></li> 
    <li><a href="/fun/" title="Fun Videos" <%if (strSelected == "fun"){%>class="current"<%} %>><span>Fun</span></a></li> 
    <li><a href="/comedy/" title="Comedy Videos" <%if (strSelected == "comedy"){%>class="current"<%} %>><span>Comedy</span></a></li> 
</ul> 

Когда я передам комедию с моей веб-страницы в usercontrol, тогда она выберет комедийное меню. Я хочу реализовать такую ​​же функциональность в случае мастер-страниц, может ли кто-нибудь сказать мне, как достичь этого типа объекта для мастер-страниц.

Один из способов, которым я чувствую - передать параметр строки запроса http://example.com/all/?select=all, я проверю функцию master page_load, если параметр «все» или «забава» или «комедия», затем выберите соответствующее меню. Но это плохо, потому что я не хочу добавлять дополнительный параметр строки запроса к своим URL-адресам.

Скажите, пожалуйста, как решить эту проблему.

Благодаря

ответ

1

Вы можете получить доступ к свойствам главной страницы со страницы контента после отливки мастера к правильному типу:

public class MyMasterPage : MasterPage 
{ 
    public string MyMenuProperty { get; set; } 

    protected void Page_PreRender(object sender, EventArgs e) 
    { 
     if (MyMenuProperty == "comedy") 
     { 
      /* do your menu stuff */ 
     } 
    } 
} 

public class MyContentPage : Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     var myMaster = Page.Master as MyMasterPage; 
     if (myMaster != null) 
     { 
      myMaster.MyMenuProperty = "comedy"; 
     } 
    } 
+0

Выглядит неплохо и так же, как usercontrol, но есть ли какие-либо вещи, с которыми вместо написания кода на моей веб-странице я могу передать «комедию» из html-разметки ?? как в usrecontrols ?? – Prashant

+0

Я думаю, что ответ Джаммина содержит эту часть. Похоже, что если вы разместите <% @ MasterType VirtualPath = "~/YourMaster.master"%> на своей странице контента, кастинг будет выполнен автоматически. – rmac

0

Hai Prashant,

Я была такая же проблема месяц назад и я отправил в переполнение стека проверить это один может помочь вам Find a UnorderedList <UL> control inside a master page from a content page in asp.net

+0

Это собственный адрес ваш вопрос, но его очень похож на urs ... –

+0

В вашем подходе я должен сделать все свои элементы управления html серверными элементами управления, которые, как я считаю, не подходят. – Prashant

1

Один из способов я сделал Двойники в прошлое добавить это производные страницы любых содержательных страниц:

<%@ MasterType VirtualPath="~/YourMaster.master" %> 

Тогда в мастера я выставил это:

private PageTypes currentPageType; 

public PageTypes CurrentPageType 
{ 
    get { return currentPageType; } 
    set { currentPageType = value; } 
} 

На этой работе это использовался так мастер знал, какой тип страницы он был включен, и поэтому изменил несколько вещей, цвет, элементов управления и т.д. Таким образом, с содержанием Pageload я сделал

Master.CurrentPageType = PageTypes.System; 

Одно дело отметить, однако, VS имеет тенденцию стонать о производном MasterType, пока вы не выполните восстановление всех.

1

Я думаю, что, может быть совершенно другой подход может быть проще в реализации и обслуживании.

Как насчет вас просто проанализировать URL-адрес в header.ascx?

Например:

<li><a href="/all/" title="All Videos" runat="server" class='<%= Request.Url.ToString().Contains("/all/") ? "current" : "" %>' ><span>All</span></a></li> 

Таким образом, вам не придется беспокоиться о настройке свойств доступа/литья мастер-страниц и т.д. ...