在从 gridview 排序事件 C# 回发时维护 Bootstrap 选项卡
Maintain Bootstrap tab on postback from gridview sorting event C#
我在排序网格视图时发生的回发期间让 Bootstrap 选项卡持续存在时遇到了一些麻烦。
我已经尝试了 Remain bootstrap tab after postback c# and http://www.aspsnippets.com/Articles/Bootstrap-Tabs-Maintain-Selected-Active-Tab-on-PostBack-in-ASPNet.aspx 中列出的解决方案,但无济于事。
我当前的代码是:
<div role="tabpanel" id="Tabs">
<!-- Nav tabs -->
<ul class="nav nav-tabs" role="tablist" id="pageTabs">
<li role="presentation" class="active"><a href="#EvidenceBase" aria-controls="home" role="tab" data-toggle="tab">Evidence Base</a></li>
<li role="presentation"><a href="#Trials" aria-controls="profile" role="tab" data-toggle="tab">Trials</a></li>
<li role="presentation"><a href="#Resources" aria-controls="messages" role="tab" data-toggle="tab">Resources</a></li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="EvidenceBase">
<div class="col-md-12">
<asp:GridView ID="EvidenceBaseGridView" runat="server" AllowPaging="true" AllowSorting="true" OnSorting="EvidenceBaseGridView_Sorting" OnPageIndexChanging="EvidenceBaseGridView_PageIndexChanging">
</asp:GridView>
</div>
</div>
<div role="tabpanel" class="tab-pane" id="Trials">
<div class="col-md-12">
<asp:GridView ID="TrialsGridView" runat="server" AllowPaging="true" AllowSorting="true" OnSorting="TrialsGridView_Sorting" OnPageIndexChanging="TrialsGridView_PageIndexChanging">
</asp:GridView>
</div>
</div>
<div role="tabpanel" class="tab-pane" id="Resources">
<div class="col-md-12">
<asp:GridView ID="ResourcesGridView" runat="server" AllowPaging="true" AllowSorting="true" OnSorting="ResourcesGridView_Sorting" OnPageIndexChanging="ResourcesGridView_PageIndexChanging">
</asp:GridView>
</div>
</div>
</div>
</div>
<asp:HiddenField ID="TabName" runat="server" ClientIDMode="Static" />
我曾经尝试在回发时设置正确的选项卡的 jQuery 是:
<script type="text/javascript">
$('#pageTabs').on('click', 'li a', function (e) {
var addressValue = $(this).attr('href').replace("#", "");
$('#TabName').val(addressValue);
});
$(document).ready(function () {
var tab = $('#TabName').val() != "" ? $('#TabName').val() : "EvidenceBase";
$('#pageTabs a[href="' + tab + '"]').tab('show');
});
</script>
我检查了回发时隐藏字段的值,它似乎只设置为“试验”选项卡,并且页面始终默认返回到“证据库”选项卡。我也尝试删除 "active" class 但这除了在初始页面加载时不显示选项卡之外没有任何区别。
由于我的 jQuery 知识非常有限,因此我们将不胜感激。
谢谢。
ASP 回答
我的直接建议是使用 updatepanels.
<asp:ScriptManager runat="server></asp:ScriptManager>
<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="EvidenceBase">
<asp:UpdatePanel runat="server">
<ContentTemplate>
<div class="col-md-12">
<asp:GridView ID="EvidenceBaseGridView" runat="server" AllowPaging="true" AllowSorting="true" OnSorting="EvidenceBaseGridView_Sorting" OnPageIndexChanging="EvidenceBaseGridView_PageIndexChanging">
</asp:GridView>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
...
这将允许 Gridview post 返回而不刷新整个页面。这意味着 active
class 将不会重新设置为初始面板。
请注意,任何由 UpdatePanel 之外的控件引起的 post 返回都会刷新整个页面,从而重新设置面板上的活动 class。
另请注意,不要忘记在您的第一个 UpdatePanel 之前的某处包含您的脚本管理器。
jQuery 回答
ASP.NET 可能会将隐藏字段的 ID 更改为:ctl00_TabName
。您可能想尝试 $('[id*=TabName]')
而不是 $('#TabName')
作为您的选择器。
Do not use UpdatePanels 除非绝对必要。您只需在服务器端设置 asp:HiddenField
的值,在回发后保持其状态。将它设置为客户端不会工作,因为它会在回发时丢失。
您可以像这样在 PageIndexChanging 事件本身上设置它。
protected void EvidenceBaseGridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
//page index changing logic here
TabName.Value = "EvidenceBaseGridView";
}
您可以对每个 GridView 执行相同的操作。此外,当您在触发每个事件后重新绑定 GridView 时,您可以在 Databind 之后设置选项卡名称。
我发现 UpdatePanels 对我编写的后端系统很有用,每个 bootstrap 3 选项卡使用一个,并使用我在下面 linked post 中描述的方法它非常适合我的网站。希望也能帮助到其他人。
我已经在 Remain bootstrap tab after postback c# 上添加了我对 OP 问题的解决方案(为简单起见不包括我的更新面板)
link 上面,这是在 OP 说他们尝试了 post.
中的其他答案之后
我在排序网格视图时发生的回发期间让 Bootstrap 选项卡持续存在时遇到了一些麻烦。
我已经尝试了 Remain bootstrap tab after postback c# and http://www.aspsnippets.com/Articles/Bootstrap-Tabs-Maintain-Selected-Active-Tab-on-PostBack-in-ASPNet.aspx 中列出的解决方案,但无济于事。
我当前的代码是:
<div role="tabpanel" id="Tabs">
<!-- Nav tabs -->
<ul class="nav nav-tabs" role="tablist" id="pageTabs">
<li role="presentation" class="active"><a href="#EvidenceBase" aria-controls="home" role="tab" data-toggle="tab">Evidence Base</a></li>
<li role="presentation"><a href="#Trials" aria-controls="profile" role="tab" data-toggle="tab">Trials</a></li>
<li role="presentation"><a href="#Resources" aria-controls="messages" role="tab" data-toggle="tab">Resources</a></li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="EvidenceBase">
<div class="col-md-12">
<asp:GridView ID="EvidenceBaseGridView" runat="server" AllowPaging="true" AllowSorting="true" OnSorting="EvidenceBaseGridView_Sorting" OnPageIndexChanging="EvidenceBaseGridView_PageIndexChanging">
</asp:GridView>
</div>
</div>
<div role="tabpanel" class="tab-pane" id="Trials">
<div class="col-md-12">
<asp:GridView ID="TrialsGridView" runat="server" AllowPaging="true" AllowSorting="true" OnSorting="TrialsGridView_Sorting" OnPageIndexChanging="TrialsGridView_PageIndexChanging">
</asp:GridView>
</div>
</div>
<div role="tabpanel" class="tab-pane" id="Resources">
<div class="col-md-12">
<asp:GridView ID="ResourcesGridView" runat="server" AllowPaging="true" AllowSorting="true" OnSorting="ResourcesGridView_Sorting" OnPageIndexChanging="ResourcesGridView_PageIndexChanging">
</asp:GridView>
</div>
</div>
</div>
</div>
<asp:HiddenField ID="TabName" runat="server" ClientIDMode="Static" />
我曾经尝试在回发时设置正确的选项卡的 jQuery 是:
<script type="text/javascript">
$('#pageTabs').on('click', 'li a', function (e) {
var addressValue = $(this).attr('href').replace("#", "");
$('#TabName').val(addressValue);
});
$(document).ready(function () {
var tab = $('#TabName').val() != "" ? $('#TabName').val() : "EvidenceBase";
$('#pageTabs a[href="' + tab + '"]').tab('show');
});
</script>
我检查了回发时隐藏字段的值,它似乎只设置为“试验”选项卡,并且页面始终默认返回到“证据库”选项卡。我也尝试删除 "active" class 但这除了在初始页面加载时不显示选项卡之外没有任何区别。
由于我的 jQuery 知识非常有限,因此我们将不胜感激。
谢谢。
ASP 回答
我的直接建议是使用 updatepanels.
<asp:ScriptManager runat="server></asp:ScriptManager>
<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="EvidenceBase">
<asp:UpdatePanel runat="server">
<ContentTemplate>
<div class="col-md-12">
<asp:GridView ID="EvidenceBaseGridView" runat="server" AllowPaging="true" AllowSorting="true" OnSorting="EvidenceBaseGridView_Sorting" OnPageIndexChanging="EvidenceBaseGridView_PageIndexChanging">
</asp:GridView>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
...
这将允许 Gridview post 返回而不刷新整个页面。这意味着 active
class 将不会重新设置为初始面板。
请注意,任何由 UpdatePanel 之外的控件引起的 post 返回都会刷新整个页面,从而重新设置面板上的活动 class。
另请注意,不要忘记在您的第一个 UpdatePanel 之前的某处包含您的脚本管理器。
jQuery 回答 ASP.NET 可能会将隐藏字段的 ID 更改为:
ctl00_TabName
。您可能想尝试 $('[id*=TabName]')
而不是 $('#TabName')
作为您的选择器。
Do not use UpdatePanels 除非绝对必要。您只需在服务器端设置 asp:HiddenField
的值,在回发后保持其状态。将它设置为客户端不会工作,因为它会在回发时丢失。
您可以像这样在 PageIndexChanging 事件本身上设置它。
protected void EvidenceBaseGridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
//page index changing logic here
TabName.Value = "EvidenceBaseGridView";
}
您可以对每个 GridView 执行相同的操作。此外,当您在触发每个事件后重新绑定 GridView 时,您可以在 Databind 之后设置选项卡名称。
我发现 UpdatePanels 对我编写的后端系统很有用,每个 bootstrap 3 选项卡使用一个,并使用我在下面 linked post 中描述的方法它非常适合我的网站。希望也能帮助到其他人。
我已经在 Remain bootstrap tab after postback c# 上添加了我对 OP 问题的解决方案(为简单起见不包括我的更新面板) link 上面,这是在 OP 说他们尝试了 post.
中的其他答案之后