0

したがって、テキストボックスと保存ボタンを備えた部分ビュー「_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を手動で再構築し、レンダリングのために返す必要はありません。部分ビューのフォームでデータをコントローラーに送信しているので、アクションメソッドから戻ったときに同じビューが自分自身を再描画する方法が必要だと思います。

何か案は?

4

1 に答える 1

1

私はあなたが正しいと思います、そしてあなたはポストバックであなたの更新を見せたいです。その場合、これを試すことができます:

<div id="customerDiv">
  @Html.RenderAction("Edit", "Customer", Model)
</div>

@using (Ajax.BeginForm())結果を編集します。

于 2012-09-28T20:19:41.050 に答える