これらの時間について読んでいるので、私の質問は一般的なシナリオだと思いますが、正直なところ、まだ疑問があります. これらのアクションを備えた単純なコントローラーがあります(これがPRGパターンに従っていることを理解している限り)
public ActionResult Index()
{
var partyId = (int) Session["PartyId"];
var viewModel = _displayBuilder.Build(partyId);
return View(viewModel);
}
[HttpGet]
public ActionResult AddDocument()
{
var partyId = (int) Session["PartyId"];
var viewModel = _createBuilder.Build(partyId);
return PartialView("_AddDocument", viewModel);
}
[HttpPost]
public ActionResult AddDocument(AddDocumentViewModel viewModel)
{
var partyId = (int)Session["PartyId"];
if (ModelState.IsValid)
{
_documentsManager.AddDocument(viewModel, partyId);
return RedirectToAction("Index");
}
var newViewModel = _createBuilder.Rebuild(viewModel, partyId);
return PartialView("_AddDocument", newViewModel);
}
そして、インデックスビューはこれを内部に保持します
<div id="addDocument">
@{ Html.RenderAction("AddDocument"); }
</div>
プラスドキュメントのリスト。
post メソッドに記載されているように、部分ビューのみが表示されるため、サーバーの検証が失敗した場合に問題が発生します。インデックス ビューを表示できるようにしたいのですが、フォームの状態を失うことなく (modelstate を含めて、TempData でこれを渡すことができると思いますが、とにかく投稿されたフィールドの値を失うことになります)。
考えられる限り、私にできることはいくつかあります。
- すべてを同じビューに配置
- 私がやっていることの逆を行い、ドキュメントのリストを部分ビューとして作成します。
- フォームを ajax として作成します。これについてはよくわかりません。
足りないものはありますか?
私はこのページを可能な限り「賢くない」ままにしておき、当面は ajax を避けることを考えていました。これで、フォームを部分ビューで維持し、別のビューで再利用できると思います。ビューとそれを更新するためのリストの 2 つのパーシャルということですか?
ありがとう