RadTabStrip, похоже, не выбран RadTab - почему?
Работает ли RadTabStrip в MasterPage? Вкладки не отображаются выбранными при нажатии.
шаги:
Создайте новый проект веб-приложения. По умолчанию он содержит вкладки "Главная страница" и "О программе" внутри главной страницы (Site.Master). Вкладки являются элементами управления asp:MenuItem.
Закомментируйте элемент управления asp: Menu и перетащите RadTabStrip на его место. Добавьте два RadTabs. При запуске приложения каждая вкладка работает должным образом - она выбирается при нажатии.
Теперь добавьте 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>