0

メインビューがあり、このビューのURLには、次のようなAction / Controller/Areaとidの値があります。

http:// localhost:56513 / Incident / IncidentHome / Index / 8c02a647-a883-4d69-91be-7ac5f7b28ab7

このメインビューには、Ajaxを介してコントローラーのメソッドを呼び出す部分ビューがあります。この部分ビューは、親ページのURLのID値を知っている必要があります。これを行う方法は、「ParentActionViewContent」を使用することでわかりました。何かのようなもの:

        using (Ajax.BeginForm("UpdatePersonalStatusPanel", "Status", new { area = "Tools" , id = ViewContext.ParentActionViewContext.RouteData.Values["id"].ToString() }, new AjaxOptions { UpdateTargetId = "divPersStatus" }))
        {
            <p style="text-align: center;">
                <span class="editor-label">@Html.LabelFor(m => m.StatusText)</span> <span class="editor-field">@Html.EditorFor(m => m.StatusText)</span>
                <input type="submit" value="Change Current Status" />
            </p>
        }

これで、コントローラーメソッドを呼び出すのに最適です。IDは正しく渡されるため、コントローラーはルートデータでIDを確認できます。idを使用してデータベース呼び出しを実行してから、partialviewを再度返します。問題は帰りにあります。ajax.beginformのViewContext.ParentActionViewContext.RouteData.Values["id"]。ToString()ビットで「オブジェクトのインスタンスに設定されていないオブジェクト参照」を取得しましたが、targetidが更新されません。

明らかに私は何か間違ったことをしているに違いありません。他の誰かがAjaxを介して親ビューのルートデータを表示するためのより良い方法を持っていますか?

4

1 に答える 1

0

私の理解が正しければ、この部分的なビューはそれ自体を呼び出します。メインParentActionViewContextビューがこの部分ビューを使用してアクションを初めて呼び出すため、初めて機能します。ただし、後で ajax を呼び出すと、この部分的なビューが直接返されます。部分ビューが直接呼び出された場合、親ビュー アクションがないため、 で null 参照が発生しParentActionViewContextます。

ルート データを処理するのではなく、部分ビューのモデルに id を含めることをお勧めします。

new { area = "Tools" , id = Model.Id }
于 2012-05-04T05:13:02.483 に答える