これを設定する方法は次のとおりです。
public class HomeController : Controller
{
public ActionResult MainAction()
{
return View();
}
[ChildActionOnly]
public ActionResult Index()
{
return PartialView();
}
[ChildActionOnly]
public ActionResult Create()
{
return PartialView();
}
[HttpPost]
public ActionResult ProcessCreate(SomeViewModel model)
{
return PartialView("Index");
}
}
および対応するビュー:
~/Views/Home/MainAction.cshtml
:
<div>
This is the main view
</div>
<div id="indexContainer">
@{Html.RenderAction("Index");}
</div>
~/Views/Home/Index.cshtml
:
<div>
This is the index view @DateTime.Now.ToLongTimeString()
</div>
<div>
@{Html.RenderAction("Create");}
</div>
~/Views/Home/Create.cshtml
:
@using (Ajax.BeginForm("ProcessCreate", "Home", new AjaxOptions { UpdateTargetId = "indexContainer" }))
{
<button type="submit">OK</button>
}
jquery.unobtrusive-ajax.min.js
また、Ajax.* ヘルパーが機能するためのスクリプトを含めることも忘れないでください。
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
Create POST アクションの名前を変更したことに気付くでしょう。そうしないと、フォームのポストバック後に Html.RenderAction ヘルパーが呼び出されると、POST アクションが再度実行され、無限ループに陥ってしまうからです。