var successFunction = function (data, textStatus) {
// The data is "selector1&&&&HTML1&&&&selector2&&&&HTML2...."
var views = data.toString().split('&&&&');
for (var i=0; i<views.length; i+=2)
{
jQuery(views[i]).html(views[i+1]);
}
};
using System.Collections.Generic;
using System.Web;
using System.Web.Mvc;
namespace Messenger
public class AjaxViewResult : ActionResult
public IList<KeyValuePair<string, ActionResult>> NestedActionResults { get; set; }
public override void ExecuteResult(ControllerContext context)
HttpResponseBase response = context.HttpContext.Response;
foreach (KeyValuePair<string, ActionResult> nestedActionResult in NestedActionResults)
string selector = nestedActionResult.Key;
ActionResult actionResult = nestedActionResult.Value;
response.Write(selector);
response.Write("&&&&");
actionResult.ExecuteResult(context);
public AjaxViewResult Add(string selector, ViewResult viewResult, string controlId)
object model = viewResult.ViewData.Model;
if ((model != null) || (controlId != null))
ViewDataDictionary viewData = new ViewDataDictionary(viewResult.ViewData);
if (model != null)
viewData.Model = model;
if (controlId != null)
viewData["__RenderedControlId"] = controlId;
viewResult.ViewData = viewData;
return Add(selector, viewResult);
public AjaxViewResult Add(string selector, ActionResult actionResult)
if (NestedActionResults == null)
NestedActionResults = new List<KeyValuePair<string, ActionResult>>();
NestedActionResults.Add(new KeyValuePair<string, ActionResult>(selector, actionResult));
return this;
public ActionResult Add()
// On valide la création en reconstituant
// le contact via les infos du formulaire.
// On met à jour la datasource puis la
// liste des contacts et le contact sélectionné.
DataContext context = new DataContext();
Contact contact = new Contact();
contact.Name = Request.Form["name"];
contact.Email = Request.Form["email"];
contact.Photo = context.Contacts.First().Photo;
context.AddContact(contact);
IndexViewData model = new IndexViewData();
model.Contacts = context.Contacts.ToList();
model.SelectedContact = contact;
ViewData.Model = model;
return new AjaxViewResult().Add("#panel", View("Index"), "ReadContactPanel")
.Add("#contacts", View("Index"), "ContactsPanel");