2009-07-06 47 views
7

Có cách nào để chỉ định nhiều id mục tiêu cập nhật với Ajax.ActionLink để tôi có thể hiển thị một tập hợp các lượt xem một phần trên gọi lại không?Nhiều id mục tiêu cập nhật với Ajax.ActionLink ASP.Net MVC

Vấn đề tôi thấy là Ajax.ActionLink chỉ cung cấp một id đích để cập nhật, nhưng những gì tôi cần là cập nhật nhiều vùng của trang với dữ liệu khác sau cuộc gọi ajax.

Bất kỳ trợ giúp nào về điều này sẽ tuyệt vời! Cảm ơn!

Trả lời

4

Không, không có. Bạn có thể, tuy nhiên, viết mã mà thực hiện điều này cho mình. Bạn cần phải:

  1. Phân chia HTML được trả về thành các "khu vực khác nhau" mà bạn sẽ áp dụng cho các phần khác nhau của trang. Bạn có thể làm điều này trên bộ điều khiển (có lẽ bằng cách hiển thị nhiều hành động và lưu trữ một danh sách các đoạn HTML được trả về) hoặc trong JavaScript.
  2. Viết mã JavaScript để lấy HTML được trả về, lặp lại các mục tiêu bạn muốn cập nhật và áp dụng đoạn HTML thích hợp cho mỗi. Mã sẽ trông giống như mã bên dưới.
  3. Không sử dụng trình trợ giúp HTML biểu mẫu Ajax. Thay vào đó, hãy tạo biểu mẫu chuẩn và gửi biểu mẫu qua JavaScript.

Ví dụ:

$.ajax({ 
    type: "POST", 
    url: "/action/controller", 
    success: function(data) { 
     var key; 
     for (key in data) { 
      $("#" + key).html(data[key]); 
     } 
    } 
}); 

này giả định rằng các hành động mà bạn gọi sẽ trả về một đối tượng mà các tên thuộc tính là ID của các yếu tố này để cập nhật, và các giá trị bất động sản là những mảnh vỡ HTML như dây đàn.

6

Bạn có thể kiểm tra liên kết này: http://devlicio.us/blogs/sergio_pereira/archive/2009/08/23/asp-net-mvc-with-jquery-superload.aspx

tôi đã cùng một vấn đề và nó giúp tôi giải quyết nó

+0

tôi đã sử dụng công việc này, với những thay đổi nhỏ để làm cho nó hoạt động trong VB. vẫn còn, đó là một giải pháp lộn xộn. Nhóm mvc cần phải được smacked trong đầu cho resorting chúng tôi này, tại sao họ không thể chỉ làm cho một khuôn khổ HOẠT ĐỘNG và không phổ biến, cơ bản mỗi ngày những thứ như người ta mong đợi? –

+0

@ Erx_VB.NExT.Coder: giải pháp dọn dẹp là sử dụng kết quả Json, bạn có thể cập nhật bất kỳ phần nào của trang bạn muốn sử dụng javascript trên kết quả này – Gregoire

+0

@ Erx_VB.NExT.Coder Tôi biết đây là một số thời gian trước đây, nhưng bạn nên nhìn vào Apache Wicket, nếu bạn không phải ở lại với asp.net Framework. Wicket sử dụng Java cho mã phía máy chủ mặc dù (chỉ khác biệt nhỏ). – eaglei22

1

Tôi biết câu hỏi này là cũ nhưng nếu bạn sử dụng giải pháp tương tự như @Gregoire chỉ vào (http://devlicio.us/blogs/sergio_pereira/archive/2009/08/23/asp-net-mvc-with-jquery-superload.aspx) cho phía máy chủ, bạn có thể chuyển nhiều id trong AjaxOptions

@Ajax.ActionLink("Link", "Action", new AjaxOptions { UpdateTargetId = "id1, #id2" }) 

khung MVC sẽ tự động thêm '#' vào id1 trong trường hợp này. Sau đó bạn sẽ cần phải sửa đổi jquery.unobtrusive-ajax.js 's chức năng asyncOnSuccess xung quanh dòng # 45 trông như thế này:

mode = (element.getAttribute("data-ajax-mode") || "").toUpperCase(); 
$(element.getAttribute("data-ajax-update")).each(function (i, update) { 
    var top, 
     html = $("#" + update.id, data).html(); 

    switch (mode) { 
    case "BEFORE": 
     top = update.firstChild; 
     $("<div />").html(html).contents().each(function() { 
      update.insertBefore(this, top); 
     }); 
     break; 
    case "AFTER": 
     $("<div />").html(html).contents().each(function() { 
      update.appendChild(this); 
     }); 
     break; 
    default: 
     $(update).html(html); 
     break; 
    } 
}); 

Các Javascript chỉ đang sử dụng id cùng đã vượt qua chỉ lấy nội dung đó và thay thế id cùng với điều đó cùng Nội dung. Điều này cũng làm việc cho Ajax.BeginForm(). Có lý?

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