我正在使用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”)但不确定如何绕过它。
答案 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];
}
}