2012-09-10 26 views
13

Chúng tôi đang trong se cùng hoàn cảnh như câu hỏi Make Twitter Bootstrap navbar link active, nhưng trong trường hợp của chúng tôi, chúng tôi đang sử dụng ASP.net và MasterPages ...Twitter bootstrap + trang chủ asp.net, cách đặt mục thanh điều hướng là hoạt động khi người dùng chọn nó?

Điều được thanh điều hướng được định nghĩa tại masterpage và khi bạn bấm vào một menuitem bạn đang chuyển hướng đến trang con tương ứng, vậy làm thế nào bạn sẽ làm gì để thay đổi mục hoạt động thanh điều hướng một cách consecuently mà không cần sao chép logic trong mỗi trang con? (Tốt mà không cần biến session và javascript chỉ tại trang chủ)

+0

Đã có phản ứng tương tự trong: [ở đây] (http://stackoverflow.com/question/17984553/how-to-set-navbar-item-as-active-khi-người dùng-chọn-nó/38597482) –

Trả lời

18

Chúng tôi giải quyết nó với các chức năng sau tại Master Page:

<script type="text/javascript"> 
     $(document).ready(function() { 
      var url = window.location.pathname; 
      var substr = url.split('/'); 
      var urlaspx = substr[substr.length-1]; 
      $('.nav').find('.active').removeClass('active'); 
      $('.nav li a').each(function() { 
       if (this.href.indexOf(urlaspx) >= 0) { 
        $(this).parent().addClass('active'); 
       } 
      }); 
     }); 
    </script> 
+0

Làm việc tốt! Cảm ơn. – PiLHA

+0

Nếu bạn muốn sử dụng jQuery cho điều này, tôi khuyên bạn nên chỉ cần đặt lớp đang hoạt động vào thẻ cha chính của thẻ đang hoạt động. Xem câu trả lời của tôi dưới đây. – Tillito

3

Dưới đây là những gì tôi đã được sử dụng trong Razor:

<li class="@(Model.PageName == "DataEntryForms" ? "active" : "")"> 
    <a href="DataEntryForms">  
    Data Entry Forms 
    </a> 
</li> 
<li class="@(Model.PageName == "UserAdmin" ? "active" : "")"> 
    <a href="UserAdmin">  
    User Administration 
    </a> 
</li> 

Chỉ cần xác định tên của trang là thuộc tính trong mô hình, sau đó hoàn tất kiểm tra cho từng li mà bạn có.

1

Giả sử rằng lớp hoạt động được thiết lập một cách chính xác bằng ASP.net, tôi muốn giới thiệu một giải pháp dễ dàng hơn:

// Add the class to the parent li element of the active a element: 
$('#NavigationMenu ul li a.active').parent().addClass('active'); 

// Remove the active class from the a element: 
$('#NavigationMenu ul li a.active').removeClass('active'); 

Sử dụng ASP.net định tuyến, giải pháp này hoạt động trơn tru trong dự án hiện tại của tôi.

Và nếu bạn muốn thao tác mục hiện hoạt của menu, tôi khuyên bạn nên sử dụng MenuItemDataBound của điều khiển menu trong mã phía sau để thay thế. Nhưng trong trường hợp của tôi, điều này là không cần thiết.

3
<script type="text/javascript"> 
    $(document).ready(function() { 
     var url = window.location; 
     $('ul.nav li a').each(function() { 
      if (this.href == url) { 
       $("ul.nav li").each(function() { 
        if ($(this).hasClass("active")) { 
         $(this).removeClass("active"); 
        } 
       }); 
       $(this).parent().parent().parent().addClass('active'); 
       $(this).parent().addClass('active');      
      } 
     }); 
    }); 
</script> 
+0

thêm mô tả – GAMITG

+0

sau 8 giờ thử và khóc ....! Cảm ơn bhai. – adityawho

0

Giải pháp bởi "kinage Sujit" làm việc tốt nhất cho tôi, tuy nhiên tôi đã phải thay đổi một dòng:

var url = window.location.origin + window.location.pathname; 
Các vấn đề liên quan