在回发

时间:2017-11-07 01:39:35

标签: c# asp.net twitter-bootstrap-3 repeater

我正在使用boostrap在asp.net Web应用程序中创建一个标签式菜单。

我正在使用几个转发器来设置菜单项以及选项卡式页面的内容。只有两个选项卡项,其值由DB设置。我正在努力解决的问题是,在回发后,所选菜单会返回到第一个菜单项。最初,我使用条件样式显示第一个选项卡。

这是标签式菜单:

<asp:Repeater runat="server" ID="rptCategories">
    <HeaderTemplate>
        <ul class="nav nav-pills ">
    </HeaderTemplate>
    <FooterTemplate>
        </ul>
    </FooterTemplate>
    <ItemTemplate>
        <li class="<%# Container.ItemIndex == 0 ? "nav active" : "nav" %>">
            <a href='#<%# Eval("Abbrev")%>' data-toggle="tab">
                <h3><%# Eval("CourseCategory")%></h3>
            </a>
        </li>
    </ItemTemplate>
</asp:Repeater>

<!-- Tab panes -->

<div class="tab-content">
    <asp:Repeater runat="server" ID="rptCategoryList" OnItemDataBound="rptCategoryList_ItemDataBound">
        <ItemTemplate>
            <div class="<%# Container.ItemIndex == 0 ? "tab-pane fade in active" : "tab-pane fade" %>" id='<%# Eval("Abbrev")%>'>
                <div class="container" style="margin-top: 25px;">
                    <h2 style="color: #0F4194;" class="text-center"><%# Eval("CourseCategory")%></h2>
                    <div class="row">
                        <asp:Repeater runat="server" ID="rptCourses" OnItemDataBound="rptCourses_ItemDataBound" OnItemCommand="rptCourses_ItemCommand">
                            <ItemTemplate>
                                <div class="col-md-4">
                                    <div class="bronze panel panel-default ">
                                        <div class="bronze panel-body">
                                            <h4 class="text-center"><asp:Label runat="server" id="lblCourseName" Text='<%# Eval("CourseName")%>' /></h4>
                                            <p class="text-justify">
                                                <%# Eval("CourseDesc")%>
                                            </p>
                                        </div>
                                        <asp:LinkButton ID="lbViewVideo" runat="server" 
                                                CausesValidation="False"    
                                                CommandName="AddCourse" 
                                                CommandArgument='<%# Eval("AUCourseID") %>' 
                                                data-URL = '<%#Eval("CourseURL")%>' 
                                                data-CourseID = '<%#Eval("AUCourseID")%>'
                                                data-CourseName = '<%#Eval("CourseName")%>'>
                                                <i class="glyphicon glyphicon-film"></i> View the  Tutorial
                                            </asp:LinkButton>
                                         </div>
                                    </div>
                                </div>
                            </ItemTemplate>
                        </asp:Repeater>
                    </div>
            </div>
        </ItemTemplate>
    </asp:Repeater>
</div>

我可以选择包含课程列表的第二个菜单项。只要我点击链接按钮查看视频(即回发),就会选择第一个菜单。我可以看到,这是因为菜单样式基于Container.ItemIndex是否为0(样式为“nav”或“nav active”)但不确定如何绕过它。

1 个答案:

答案 0 :(得分:1)

我找到了解决方案here

我必须添加一个隐藏字段来跟踪所选菜单(在我的例子中选择了类别)。然后使用jQuery获取隐藏字段的值;如果为空,请选择默认/第一个菜单,否则使用该值选择菜单。此外,在同一脚本中,将onclick事件与菜单项关联。

在代码隐藏中,隐藏的一行代码集是从request.Form。

中获取的

这就是我最终的结果:

<asp:HiddenField ID="hfSelCat" runat="server" />

<div class="container">
    <div id="divCategories">
        <asp:Repeater runat="server" ID="rptCategories">
            <HeaderTemplate>
                <ul class="nav nav-pills ">
            </HeaderTemplate>
            <FooterTemplate>
                </ul>
            </FooterTemplate>
            <ItemTemplate>
                <li>
                    <a href='#<%# Eval("Abbrev")%>' data-toggle="tab" aria-controls='<%# Eval("Abbrev")%>' >
                        <h3><%# Eval("CourseCategory")%></h3>
                    </a>
                </li>
            </ItemTemplate>
        </asp:Repeater>
    </div>

    <!-- Tab panes -->
    <div class="tab-content">
    ...
    </div>
</div>
<script type="text/javascript">
    $(function () {
        var tabName = $("[id*=hfSelCat]").val() != "" ? $("[id*=hfSelCat]").val() : "DelOps";
        $('#divCategories a[href="#' + tabName + '"]').tab('show');

        $("#divCategories a").click(function () {
            $("[id*=hfSelCat]").val($(this).attr("href").replace("#", ""));
        });
    });
</script>

在代码隐藏中:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        ...
        hfSelCat.Value = Request.Form[hfSelCat.UniqueID];
    }
}