2009-10-29 31 views
5

Tôi có một số phương thức hành động trên bộ điều khiển của mình. Các tab giao diện người dùng.Asp.Net MVC tải một phần xem bằng cách sử dụng ajax từ tab Giao diện người dùng JQuery

Các tab được định nghĩa như thế này:

<div id="tabs"> 
    <li><a href="#FirstTab" title="First tab">First tab</a></li> 
    <li><%= Html.ActionLink("General", "General", new {id=Model.Id}) %></li> 
    <li><%= Html.ActionLink("Details", "Details", new {id=Model.Id}) %></li> 
    <div id="FirstTab"> 
    ... 
    </div> 
</div> 

này làm cho các tab tốt, tab đầu tiên (với nội dung tĩnh) được hiển thị một cách chính xác, nhưng khi tôi nhấp vào tab khác, không có gì xảy ra.

Nếu thay vì trả lại một phần lượt xem từ các phương thức hành động, tôi chỉ trả lại nội dung đơn giản, nội dung sẽ hiển thị nội dung tốt và các tab hoạt động hoàn hảo.

Bất kỳ ý tưởng nào về việc tôi đang làm gì sai?

Cảm ơn

+1

Cho đến nay tất cả mọi thứ có vẻ tốt. Bạn có thể kiểm tra xem cuộc gọi ajax có thực sự xảy ra không? Và nếu nó đang xảy ra, những gì đang được trả lại từ hành động? Bạn có thể kiểm tra điều này một cách dễ dàng với các công cụ như FireBug. –

+0

Xin chào Johnny, vâng, cuộc gọi đang diễn ra (tôi đặt các điểm ngắt trong các hành động và chúng bị trúng). Tôi đã khắc phục sự cố bằng cách sử dụng các trang aspx thay vì ascx (các trang aspx không có thẻ html, head hoặc body, chỉ là điều khiển mà tôi muốn hiển thị). Điều này có vẻ lạ mặc dù, hoặc có lẽ đó là tôi không có sự khác biệt rõ ràng giữa Xem và PartialView – willvv

+0

Tôi vui vì bạn đã có thể tìm thấy một giải pháp làm việc. –

Trả lời

9

Xin chào, tôi đã làm điều tương tự gần đây. Tôi đơn giản để được rõ ràng hơn:

Các html:

<div class="tabs"> 
       <ul> 
        <li> 
         <a onclick="TabItemClicked(this,<%=Url.Action("General", new {id=Model.Id}) %>))" href="#fragment1"> 
         <span>General</span> 
         </a> 
        </li> 
        <li> 
         <a onclick="TabItemClicked(this,<%= Html.ActionLink("Details", new {id=Model.Id}) %>))" href="#fragment2"> 
         <span>Details</span> 
         </a> 
        </li> 
       </ul> 
       <div id="fragment1"></div> 
       <div id="fragment2"></div> 
    </div> 

và mã JQuery:

function TabItemClicked(a, action) { 

    var container = $(a).parents('div.tabs'); 
    var resultDiv = $($(a).attr('href'), container); 

    $.ajax({ 
     type: "POST", 
     url: action, 
     data: {}, 
     success: function(response) { 
      resultDiv.html(''); 
      resultDiv.html(response); 
     } 
    }); 
} 
+0

Cảm ơn, tôi biết điều này sẽ hiệu quả, nhưng tôi đã cố gắng đạt được nó với chức năng mặc định của các tab giao diện người dùng JQuery ... – willvv

+0

oh, ok. Vâng, cảm ơn vì đã chấp nhận :) –

Các vấn đề liên quan