【问题标题】:Remain bootstrap tab after postback c#回发后保持引导选项卡c#
【发布时间】:2014-02-03 21:30:11
【问题描述】:

我目前在文件上传回发后保留引导选项卡时遇到问题。 代码如下

<script type="text/javascript">

                $('#myTab a[href="#image"]').click(function (e) {
                    e.preventDefault();
                    $("#myTab").removeClass("active"); 
                    $(this).addClass('active');
                    $(this).tab('show');
                })

                $('#myTab a[href="#information"]').click(function (e) {
                    e.preventDefault();
                    $("#myTab").removeClass("active");
                    $(this).addClass('active');
                    $(this).tab('show');
                })

                $('#myTab a[href="#password"]').click(function (e) {
                    e.preventDefault();
                    $("#myTab").removeClass("active");
                    $(this).addClass('active');
                    $(this).tab('show');
                })

                $('#myTab a[href="#account"]').click(function (e) {
                    e.preventDefault();
                    $("#myTab").removeClass("active");
                    $(this).addClass('active');
                    $(this).tab('show');
                })

    </script>

谁能告诉我在回发后如何保留这个引导程序?

【问题讨论】:

    标签: c# asp.net twitter-bootstrap


    【解决方案1】:

    嗯,我已经遇到了这个问题,我是这样解决的:

    1. 在您的页面上包含一个新的HiddenField,并将其值设置为需要显示的第一个tab:

      <asp:HiddenField ID="hidTAB" runat="server" Value="image" />
      
    2. 在您定义的每个 click 函数以交替 tabs 时,将 HiddenField 值设置为实际点击的 tab。

      document.getElementById('<%=hidTAB.ClientID %>').value = "image";
      
    3. 在您的 jQuery document.ready 函数中,使用 HiddenField 值切换到在 Postback 之前打开的最后一个选项卡。

      $(document).ready( function(){
          var tab = document.getElementById('<%= hidTAB.ClientID%>').value;
          $( '#myTab a[href="' + tab + '"]' ).tab( 'show' );
      });
      

    Here's the Bootstrap Tab Documentation 和 here's the jQuery Ready documentation

    【讨论】:

    • 嗨,对不起。我是 jquery 的新手。你能提供一个样本让我继续工作吗?
    • 在第三步,我一直遇到错误“;”预期的。我检查语法,我找不到任何问题?怎么解决?
    • 将 document.getElementById('').. 更改为 ('')。看起来还是一样。
    • 第三步相关的代码是如何渲染的?你可以把它放在这里吗?
    • 我将代码更改为 $(document).ready(function () { var tab = document.getElementById('').value; $('#myTab a[href="' + tab + '"]').tab('show'); })
    【解决方案2】:

    在尝试了很长一段时间后,我决定更改为 jquery 选项卡。 首先,jquery 选项卡也给出了我在这种情况下遇到的同样问题。 但是经过大量努力寻找解决方案并在代码之后尝试代码。

    我设法找到了solution

    我非常感谢提供此解决方案的人。 在这个解决方案中,它使用 sessionStorage(对我来说,它是我从未听说过的新东西) &代码是

    $(document).ready(function () {
    var currentTabIndex = "0";
    
    $tab = $("#tabs").tabs({
         activate : function (e, ui) {
            currentTabIndex = ui.newTab.index().toString();
            sessionStorage.setItem('tab-index', currentTabIndex);
         }
    });
    
    if (sessionStorage.getItem('tab-index') != null) {
        currentTabIndex = sessionStorage.getItem('tab-index');
        console.log(currentTabIndex);
        $tab.tabs('option', 'active', currentTabIndex);
    }
    $('#btn-sub').on('click', function () {
        sessionStorage.setItem("tab-index", currentTabIndex);
        //window.location = "/Home/Index/";
    });
    });
    

    【讨论】:

      【解决方案3】:

      参考以上思路,这里是我的做法(包含完整代码)

      在您的 HTML 页面中,在

      部分放置
      <script type="text/javascript">
          $(document).ready(function () {
              var tab = document.getElementById('<%= hidTAB.ClientID%>').value;
              $('#myTabs a[href="' + tab + '"]').tab('show');
          });
      </script>
      

      在

      部分放置一个隐藏字段
      <asp:HiddenField ID="hidTAB" runat="server" Value="#tab1" />
      

      在

      部分也有Bootstrap 3.0相关代码
      <ul class="nav nav-tabs" id="myTabs">
        <li><a href="#tab1" data-toggle="tab">Home page</a></li>
        <li><a href="#tab2" data-toggle="tab">another page</a></li>
      </ul>
      

      不要将任何选项卡设置为活动状态(这是由 Hiddenfield 的初始 Value="#tab1" 设置的)。

      然后给tab2 DIV添加一个按钮

      像这样:

      <div class="tab-pane" id="tab2">
        <asp:FileUpload ID="FileUpload2" runat="server" /> (note this example is for uploading a file)
        <asp:Button ID="FileUploadButton" runat="server" Text="Upload File" onclick="FileUploadButton_Click" />
      </div>
      

      最后在后面添加你的c#代码来设置隐藏字段的值

      protected void FileUploadButton_Click(object sender, EventArgs e)
      {
            hidTAB.Value = "#tab2";
      }
      

      在回发时,JQuery 将读取隐藏字段中的新值并显示 tab2 :)

      希望这对某人有所帮助。

      Trev.

      【讨论】:

      • 我试过这个代码。但所有选项卡都是可见的。当我们单击 tab2 时,它的添加类“活动”。但即使在
        中添加了“活动”类,UI 也没有变化。你能说出什么是错的吗?
      • 这很好用,但我发现我必须将隐藏字段设置为具有静态 ID。 &lt;asp:HiddenField ID="hidTAB" runat="server" Value="#home" ClientIDMode="Static" /&gt;
      【解决方案4】:

      请试试这个

      <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" />
      <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
      <script type="text/javascript" src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
      <div class="panel panel-default" style="width: 500px; padding: 10px; margin: 10px">
      <div id="Tabs" role="tabpanel">
      <!-- Nav tabs -->
       <ul class="nav nav-tabs" role="tablist">
          <li><a href="#personal" aria-controls="personal" role="tab" data-toggle="tab">Personal
          </a></li>
          <li><a href="#employment" aria-controls="employment" role="tab" data-toggle="tab">Employment</a></li>
       </ul>
      <!-- Tab panes -->
       <div class="tab-content" style="padding-top: 20px">
          <div role="tabpanel" class="tab-pane active" id="personal">
              This is Personal Information Tab
          </div>
          <div role="tabpanel" class="tab-pane" id="employment">
              This is Employment Information Tab
          </div>
       </div>
       </div>
      <asp:Button ID="Button1" Text="Submit" runat="server" CssClass="btn btn-primary" />
      <asp:HiddenField ID="TabName" runat="server" />
      </div>
      <script type="text/javascript">
      $(function () {
      var tabName = $("[id*=TabName]").val() != "" ? $("[id*=TabName]").val() : "personal";
      $('#Tabs a[href="#' + tabName + '"]').tab('show');
      $("#Tabs a").click(function () {
          $("[id*=TabName]").val($(this).attr("href").replace("#", ""));
      });
      });
      </script>
      

      【讨论】:

      • 这对我有用。但在某些情况下它不起作用。我在第二个选项卡上的转发器中有许多链接按钮。当我单击任何链接按钮时,它会显示第一个选项卡内容,并且两个选项卡都已停用。你能告诉我如何解决这个问题吗??
      【解决方案5】:

      在上面的答案中:文档准备功能必须修改如下

        $(document).ready(function () {
              var selectedTab = $("#<%=hidTAB.ClientID%>");
              var tabId = selectedTab.val() != "" ? selectedTab.val() : "tab1";
              $('#myTab a[href="#' + tabId + '"]').tab('show');
              $("#myTab a").click(function () {
                  selectedTab.val($(this).attr("href").substring(1));
              });
          });
      

      【讨论】:

        猜你喜欢
        相关资源
        最近更新 更多
        热门标签