使用引导程序的ASP.NET选项卡在DataGrid分页后转回活动选项卡?

时间:2015-08-01 13:35:15

标签: asp.net twitter-bootstrap

使用ASP.NET管理模板Siminta中包含的引导选项卡时遇到问题。每当我点击下一次点击回发事件时,它将返回活动标签。我尝试了许多解决方案,但徒劳无功。 asp.net bootstrap Keep current active tab after post-back event

    <ul class="nav nav-pills">
        <li class="active">
             <a href="#EmpProfile" data-toggle="tab"><i class="fa fa-home"></i>  Profile</a>
          </li>
          <li>
                <a href="#EmpEducation" data-toggle="tab"><i class="fa fa-leanpub"></i>  Education</a>
           </li>
</ul>
............
<div class="tab-content">

   <div class="tab-pane fade in active" id="EmpProfile">
.........
  </div
</div>

引导程序中的代码:

+function ($) {
  'use strict';

  // TAB CLASS DEFINITION
  // ====================

  var Tab = function (element) {
    this.element = $(element)
  }

  Tab.prototype.show = function () {
    var $this    = this.element
    var $ul      = $this.closest('ul:not(.dropdown-menu)')
    var selector = $this.data('target')

    if (!selector) {
      selector = $this.attr('href')
      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
    }

    if ($this.parent('li').hasClass('active')) return

    var previous = $ul.find('.active:last a')[0]
    var e        = $.Event('show.bs.tab', {
      relatedTarget: previous
    })

    $this.trigger(e)

    if (e.isDefaultPrevented()) return

    var $target = $(selector)

    this.activate($this.parent('li'), $ul)
    this.activate($target, $target.parent(), function () {
      $this.trigger({
        type: 'shown.bs.tab',
        relatedTarget: previous
      })
    })
  }

  Tab.prototype.activate = function (element, container, callback) {
    var $active    = container.find('> .active')
    var transition = callback
      && $.support.transition
      && $active.hasClass('fade')

    function next() {
      $active
        .removeClass('active')
        .find('> .dropdown-menu > .active')
        .removeClass('active')

      element.addClass('active')

      if (transition) {
        element[0].offsetWidth // reflow for transition
        element.addClass('in')
      } else {
        element.removeClass('fade')
      }

      if (element.parent('.dropdown-menu')) {
        element.closest('li.dropdown').addClass('active')
      }

      callback && callback()
    }

    transition ?
      $active
        .one($.support.transition.end, next)
        .emulateTransitionEnd(150) :
      next()

    $active.removeClass('in')
  }


  // TAB PLUGIN DEFINITION
// =====================


  var old = $.fn.tab

  $.fn.tab = function ( option ) {
    return this.each(function () {
      var $this = $(this)
      var data  = $this.data('bs.tab')

      if (!data) $this.data('bs.tab', (data = new Tab(this)))
      if (typeof option == 'string') data[option]()
    })
  }

  $.fn.tab.Constructor = Tab


  // TAB NO CONFLICT
  // ===============

  $.fn.tab.noConflict = function () {
    $.fn.tab = old
    return this
  }


  // TAB DATA-API
  // ============

//  $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
//    e.preventDefault()
//    $(this).tab('show')
//  })
$('[data-toggle="tab"],[data-toggle="pill"]').click(function () {
    $(this).parent().children('.active[data-toggle="tab"],.active[data-toggle="pill"]').removeClass('active');
    $(this).addClass('active');
});
}(jQuery);

那么,我该如何解决呢?

2 个答案:

答案 0 :(得分:0)

我遵循了这条指令,但它仍然不起作用:Bootstrap Tabs Maintain Selected (Active) Tab on PostBack in ASP.Net,使用相同的bootstrap版本不同之处只是我将DataGrid与Paging一起使用,每当我转到下一个选项卡时,单击DataGrid的页面然后它回到Active Tab(第一个): 添加:

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

然后使用此脚本:

<script type="text/javascript">
    $(function () {
        var tabName = $("[id*=TabName]").val() != "" ? $("[id*=TabName]").val() : "EmpProfile";
        $('#Tabs a[href="#' + tabName + '"]').tab('show');
        $("#Tabs a").click(function () {
            $("[id*=TabName]").val($(this).attr("href").replace("#", ""));
        });
    });
</script>

然后,把后面的代码:

protected void Page_Load(object sender, EventArgs e)
        {
            if (this.IsPostBack)
            {
                TabName.Value = Request.Form[TabName.UniqueID];

            }
}

我也不会忘记添加这个:

protected void grdEmployee_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
        {

            grdEmployee.CurrentPageIndex = e.NewPageIndex;
            TabName.Value = Request.Form[TabName.UniqueID];
            BindGrid();

        }
}

答案 1 :(得分:0)

 <!--Basic Tabs -->

    <ul class="nav nav-pills">
        <li class="active">
            <a href="#EmpProfile" data-toggle="tab"><i class="fa fa-home"></i> Profile</a>
        </li>
       .............
    </ul>

    <div class="tab-content">

        <div class="tab-pane fade in active" id="EmpProfile">
            <asp:UpdatePanel ID="updatePanelEmployee" runat="server">
                <ContentTemplate>
 <asp:Datagrid ID="grdEmployee" runat="server" ..................
 </asp:Datagrid>
                </ContentTemplate>
            </asp:UpdatePanel>

有效!