2010-03-03 18 views
6

Jestem zadowolony z funkcji RenderAction(). Chciałbym jednak załatwić ładowanie i przechowywanie danych w częściowo renderowanej akcji, aby wszystko działo się na jednej stronie.ASP.NET MVC - Ajaxified RenderAction

Wyobraź sobie następujący przypadek: Mam widok szczegółów artykułu, pod którym znajduje się link "Dodaj komentarz" pod treścią artykułu. Po kliknięciu formularza komentarzy pojawi się pod treścią postu. Użytkownik powinien móc wypełnić pole komentarza i przesłać dane bez odświeżania całego widoku, tylko częściowo renderowane działanie. Również widok musi zawierać kilka komentarzy do dodania w tej samej sesji (kilka wywołań AJAX do RenderAction());

Jaki jest najlepszy sposób, aby to osiągnąć?

Odpowiedz

13

Działanie:

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

Widok:

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

JavaScript:

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

To podstawy. Możesz zrobić to tak skomplikowanym, jak chcesz.

+0

Co z przesyłaniem danych komentarzy? Czy to się stanie "w" widoku artykułu bez odświeżania strony? – xantrus

+0

Aby przesłać dane komentarza, po prostu "POST" formularz, synchronicznie lub asynchronicznie. Możesz mieć jeden formularz na komentarz, jeśli chcesz, jeśli umieścisz go w swoim częściowym. Jeśli nie chcesz, aby strona odświeżyła się, następnie "POST" utwórz asynchronicznie i zaktualizuj stronę (usuń edytor i dodaj "div" z komentarzem) w JavaScript. –