2010-03-03 31 views
6

Tôi hài lòng với chức năng của RenderAction(). Tuy nhiên, tôi muốn ajaxify tải và lưu trữ dữ liệu trong hành động một phần rendered, để mọi thứ xảy ra trong một trang.ASP.NET MVC - Ajaxified RenderAction

Hãy tưởng tượng trường hợp sau: Tôi có chế độ xem chi tiết bài viết trong đó có liên kết "Thêm nhận xét" bên dưới nội dung của bài viết. Khi được nhấp, biểu mẫu nhận xét sẽ xuất hiện bên dưới nội dung của bài đăng. Người dùng sẽ có thể điền vào hộp nhận xét và gửi dữ liệu mà không cần làm mới toàn bộ chế độ xem, chỉ hành động được hiển thị một phần. Ngoài ra, khung nhìn phải cung cấp cho một số nhận xét được thêm vào trong cùng một phiên (một số lời gọi AJAX tới RenderAction());

Cách nào tốt nhất để đạt được điều đó?

Trả lời

13

Hành động:

[HttpGet] 
public ActionResult AddComment() 
{ 
    return PartialView(); // presumes partial view is called "AddComment" and needs no model 
          // you know what to do otherwise. 
} 

Xem:

<input type="button" value="Add Comment" onclick="addComment()" /> 

JavaScript:

function addComment() { 
    $("#comments").append("<div></div>").load("/ControllerName/AddComment"); 
} 

Đó là những điều cơ bản. Bạn có thể làm điều này phức tạp như bạn muốn.

+0

Còn việc gửi dữ liệu nhận xét thì sao? Điều đó có xảy ra "bên trong" chế độ xem bài viết mà không làm mới trang không? – xantrus

+0

Để gửi dữ liệu nhận xét, chỉ cần 'POST' một biểu mẫu, đồng bộ hoặc không đồng bộ. Bạn có thể có một biểu mẫu cho mỗi nhận xét, nếu bạn muốn, nếu bạn đặt nó vào một phần của bạn. Nếu bạn không muốn trang làm mới, sau đó 'POST' biểu mẫu không đồng bộ và cập nhật trang (xóa trình chỉnh sửa và thêm 'div' với nhận xét) trong JavaScript. –