この回答RenderPartialViewToString
に示されているメソッドを使用して、ビューを文字列にレンダリングし、作成したカスタム JsonpResult を返すことができます。
public class StudentsController : Controller
{
public ActionResult Index()
{
MyViewModel model = ...
return new JsonpResult(new
{
html = RenderViewToString("Index", model)
});
}
public string RenderViewToString(string viewName, object model)
{
ViewData.Model = model;
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}
protected string RenderPartialViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
{
viewName = ControllerContext.RouteData.GetRequiredString("action");
}
ViewData.Model = model;
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
}
ここJsonpResult
で使用されるクラスは、この投稿にあります。
これで、別のドメインから AJAX を使用してこのコントローラー アクションを呼び出すことができます。
var url = 'http://example.com/students/index';
$.getJSON(url + '?callback=?', function (data) {
alert(data.html);
});