I have this in my view:
@{
ViewBag.Title = "Page Title";
ViewBag.Subtitle = "Page Subtitle";
}
Then I use this to render a page (partial view) via ajax:
public ActionResult PageView(string pageName = null, object model = null)
{
if (Request.IsAjaxRequest())
{
// return PartialView(pageName, model);
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, pageName);
ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
// Here ViewBag/ViewData does not have the data added by view
Response.Headers["ex-page-title"] = ViewBag.Title ?? "Title Missing!";
Response.Headers["ex-page-subtitle"] = ViewBag.Subtitle ?? "Subtitle Missing!";
return new ContentResult()
{
Content = sw.GetStringBuilder().ToString()
};
}
}
else
{
return View(pageName, model);
}
}
I cannot figure out how to get the contents of the ViewBag as changed by the view. Is this possible? Is the ViewBag used by the view visible only to the view, or should it be available after calling Render? In my case ViewBag/ViewData are always empty after View.Render.