したがって、テキストボックスと保存ボタンを備えた部分ビュー「_Customer」があります。現在、部分ビューコード、私はこれを持っています:
@model CompositeViews.Models.Customer
@using (Ajax.BeginForm("Edit", "Customer", new AjaxOptions { HttpMethod = "Post", InsertionMode = InsertionMode.Replace, UpdateTargetId = "customerDiv" }))
{
<div id="customerDiv">
@Html.ValidationSummary(true)
<fieldset>
<legend>Customer</legend>
@Html.HiddenFor(model => model.CustomerId)
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<p><input type="submit" value="Save" /></p>
</fieldset>
</div>
}
ビューは、インデックスと呼ばれる親ビュー(部分ビューが依存するモデルも提供します)とともに存在します。
@model CompositeViews.ViewModels.CompositeViewModel
<h2>Index</h2>
@Html.Partial("_Customer", Model.Customer)
親ビューの名前はIndex.cshtmlで、単純なコントローラーアクションによって提供されます。パーシャルビューで[保存]ボタンをクリックすると、適切なコントローラーの適切なアクションに移動しますが、更新されたモデルデータをパーシャルビューに戻す方法がわかりません。
そこにあるすべての例では、それは非同期投稿を行うフォームですが、UpdateTargetIdは、ある種の更新されたコンテンツで埋められるをターゲットにしています。それはかなり単純明快に思えます。
私が苦労しているのは、既存のビュー(_Customer)を使用して、更新されたモデル情報を使用して同じフォームを返す方法です。基本的に、これは、フォームの一部ではない他のdivではなく、コントローラーアクションの結果をターゲットとするBeginFormです。
_CustomerビューがMVCフレームワークを介して行うように、すべてのHTMLを手動で再構築し、レンダリングのために返す必要はありません。部分ビューのフォームでデータをコントローラーに送信しているので、アクションメソッドから戻ったときに同じビューが自分自身を再描画する方法が必要だと思います。
何か案は?