RadTabStrip, похоже, не выбран RadTab - почему?

Работает ли RadTabStrip в MasterPage? Вкладки не отображаются выбранными при нажатии.

шаги:

  1. Создайте новый проект веб-приложения. По умолчанию он содержит вкладки "Главная страница" и "О программе" внутри главной страницы (Site.Master). Вкладки являются элементами управления asp:MenuItem.

  2. Закомментируйте элемент управления asp: Menu и перетащите RadTabStrip на его место. Добавьте два RadTabs. При запуске приложения каждая вкладка работает должным образом - она ​​выбирается при нажатии.

  3. Теперь добавьте NavigateUrls в каждый RadTab, указывающий на страницы "~Default.aspx" и "~About.aspx". Когда приложение запускается, вкладки, по-видимому, не выбираются при нажатии (хотя отображается правильная страница).

    В чем дело? Как я могу сделать эту работу?

Обновление: вот как я изменил код по умолчанию в Site.Master...

<div>
    <telerik:RadScriptManager ID="RadScriptManager1" runat="server">
    </telerik:RadScriptManager>
</div>

        <%--<div class="clear hideSkiplink">
            <asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal">
                <Items>
                    <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home"/>
                    <asp:MenuItem NavigateUrl="~/About.aspx" Text="About"/>
                </Items>
            </asp:Menu>
        </div>--%>

    <div>
        <telerik:RadTabStrip ID="RadTabStrip1" runat="server">
            <Tabs>
                <telerik:RadTab runat="server" Text="Root RadTab1" NavigateUrl="~/Default.aspx">
                </telerik:RadTab>
                <telerik:RadTab runat="server" Text="Root RadTab2" NavigateUrl="~/About.aspx" >
                </telerik:RadTab>
            </Tabs>
        </telerik:RadTabStrip>
    </div>

Ответ...

TheBoyan привел меня к этому. Я добавил этот код в событие Page_Load главной страницы, и он работает:

using Telerik.Web.UI;

namespace WebApplication1
{
    public partial class SiteMaster : System.Web.UI.MasterPage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            RadTab currentTab = RadTabStrip1.FindTabByUrl(Request.Url.PathAndQuery);
            if (currentTab != null) currentTab.Selected = true;
        }
    }
}

2 ответа

Решение

Я думаю, что вы также должны добавить runat="server" к элементу RadTab, если вы хотите использовать его таким образом. Например:

<telerik:RadTab Text="Home" NavigateUrl="Default.aspx" runat="server">
</telerik:RadTab>

Вы также можете использовать ContentUrl в соответствующем telerik:RadPageView ориентироваться на стороне клиента. Пример:

<telerik:RadPageView ID="RadPageView1" runat="server" ContentUrl="Default.aspx">

ОБНОВЛЕНИЕ (в вашем обновлении): когда вы добавляете runat="server" на RadTab, то это вызывает обратную передачу. При обратной передаче элемент управления не может определить, какая вкладка выбрана, даже если он переходит на указанную страницу. Вот как это решается в примере Telerik:

        protected void Page_Load(object sender, System.EventArgs e)
        {
            string urlWithSessionID = Response.ApplyAppPathModifier(Request.Url.PathAndQuery);
            RadTab tab = RadTabStrip1.FindTabByUrl(urlWithSessionID);
            if (tab != null)
            {
                tab.SelectParents();
                tab.PageView.Selected = true;
            }
        }

Единственное отличие, которое я вижу в вашем коде по сравнению с моей главной страницей, - это SelectedIndex="0" в RadTabStrip и Selected="true" на одной из вкладок Rad:

<telerik:RadTabStrip ID="RadTabStrip1" runat="server" SelectedIndex="0">
    <Tabs>
        <telerik:RadTab runat="server" Text="Root RadTab1" NavigateUrl="~/Default.aspx" Selected="true">
        </telerik:RadTab>
        <telerik:RadTab runat="server" Text="Root RadTab2" NavigateUrl="~/About.aspx" >
        </telerik:RadTab>
     </Tabs>
 </telerik:RadTabStrip>
Другие вопросы по тегам