1

Web アプリケーションのシナリオは次のとおりです。

ユーザーが会社を登録するため、会社の Create ビューを読み込みます。

作成ページ内に、会社の担当者のドロップダウン リストがあります。最初はこのリストは空です。ユーザーは作成ボタンをクリックして新しいアドレスを作成できます。

これにより、担当者の部分ビュー (JQuery ポップアップとして) が読み込まれます。ユーザーが新しい連絡先担当者を作成すると、ビューは会社登録ビューに戻ります。会社の登録ビューは、ドロップダウン ボックスに新しく追加された担当者で更新する必要があります。また、すでに入力されているデータを保持する必要があります。

以下は私のシナリオと同じですが、設計上の制約により JSON を使用できません。MVC c# アプリケーションで jquery を介してビューからコントローラーに完全なモデルを渡す方法

私の質問: ビュー内のモデル全体をセッションに保存して、コントローラーで使用する方法はありますか?

私は次のことを試しました:

        <div class="editor-label">
            @Html.LabelFor(model => model.CompanyName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.CompanyName)
            @Html.ValidationMessageFor(model => model.CompanyName)

            @Session.Add("CompanyName",Model.CompanyName)
        </div>

これは void であるため、値を返さず、レンダリングできません。

そのため、モデルをパラメーターとしてコントローラーに渡そうとしましたが、null のままです。

public ActionResult CreateContactPerson(ManagementAgencyViewModel viewModel)
    {

        if(HttpContext.Session != null)
            HttpContext.Session.Add("MaObject",viewModel);

        return RedirectToAction("Create", "ContactPersons");
    }

actionLink を使用して、「ManagementAgencies」という名前の Company Controller を呼び出します。

    @Html.ActionLink(@ViewResources.Link_New_ContactPerson, "CreateContactPerson",           "ManagementAgencies", null, new { @class = "openDialog  ui-button ui-state-default ui-corner-all", data_dialog_id = "createDialog", data_dialog_title = @ViewResources.DialogTitle_CreateNew })

隠しフィールドや JSON を使用せずに、セッションに保存する代替手段はありますか? もしそうなら、モデル値をビュー内からセッションに保存する正しい方法は何ですか?

4

1 に答える 1

1

サーバー タグは、ビューがレンダリングされるときに実行されることに注意してください。コードの場合:

@Session.Add("CompanyName",Model.CompanyName)

レンダリングされたビューがユーザーの Web ブラウザーに送信されるため、Model.CompanyName の値はありません。その場所にコードを配置すると、CompanyName のデフォルト値が何であれ、文字どおりに設定されます (おそらくその時点では null です)。

その後、ユーザーがアクションにフォームを送信すると、CreateContactPerson で定義した viewModel 変数にユーザーの値が取り込まれます。この時点で、値をセッションに保存できます。セッションを節約するコードをアクションに組み込むだけで、うまくいくはずです。

于 2012-12-04T13:16:29.083 に答える