RadTabStrip似乎没有选择RadTab - 为什么?

时间:2012-03-09 19:20:15

标签: asp.net tabs telerik webforms rad-controls

RadTabStrip是否可以在MasterPage中使用?单击时,选项卡不会显示为选中状态。

步骤:

  1. 创建一个新的Web应用程序项目。默认情况下,它包含母版页(Site.Master)中的“主页”和“关于”选项卡。选项卡是asp:MenuItem控件。

  2. 注释掉asp:Menu控件并将RadTabStrip拖到其位置。添加两个RadTabs。运行应用程序时,每个选项卡都按预期工作 - 单击时似乎已选中。

  3. 现在将NavigateUrls添加到指向“~Default.aspx”和“〜About.aspx”页面的每个RadTab。当应用程序运行时,单击时似乎没有选中选项卡(尽管显示正确的页面)。

    发生了什么事?我怎样才能做到这一点?

  4. 更新:这是我如何更改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>
    

    答案......

    Bojan Skrchevski's回答led me to this。我将此代码添加到母版页的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 个答案:

答案 0 :(得分:1)

我认为如果要像这样使用它,还需要将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 example中解决方法的问题:

        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;
            }
        }

答案 1 :(得分:0)

我可以在代码中看到与我的母版页相比唯一的区别是RadTabStrip上的SelectedIndex =“0”和其中一个Rad选项卡上的Selected =“true”:

<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>