0

したがって、現在_Layoutファイルには、すべてのページに表示されるグローバルログインおよび登録システムがあります。

<div id="global_login_register">
   <div id="login">
      @Html.Partial("_LoginPartial")
   </div>
   <div id="register">
      @Html.Partial("_RegisterPartial")
   </div>
</div>

@RenderBody()

loginPartial ページには @model LoginModel があり、レジスタには @model RegisterModel があります。これまでのところすべてが機能していますが、問題は別のモデルを View() に送信しようとすると、ログイン パーシャルに干渉することです。これを修正する唯一の方法は、ViewBag を使用してモデルをそこに保存することですか?

4

1 に答える 1

0

パーシャルにモデルが必要な場合は、パーシャル コールでモデルを渡す必要があります@Html.Partial("_LoginPartial", aLoginModel)。より難しい問題は、どこで を入手aLoginModelするかであり、いくつかの可能なオプションがあります...

  1. 別のコントロールを延期するために使用します@Html.Action(...)(それはあなたのために構築できLoginModelます)-通常、完全なコントローラーライフサイクルのオーバーヘッドの価値はありませんが、余裕がある場合はクリーンなソリューションです.
  2. あなたのインターフェイスを使用し、LoginModelすべてのビューモデルがそれを実装することを要求します-ほぼ確実に良い考えではありませんが、うまくいきます.
  3. ビューがレンダリングされる前に実行されることが保証されているメカニズムを使用してLoginModel、を保存します。ViewBag/ViewData
  4. コンテキストからHtmlを構築する方法を知っている独自のヘルパーを作成します。その結果を _layout で使用するか (例)、呼び出しをヘルパー内に置くことができます (例)。LoginModelHtmlHelper@Html.Partial("_LoginPartial", Html.LoginModel)Partial@Html.Login()

パフォーマンスが重要な場合は、#4 を使用します。

于 2013-07-13T01:51:54.227 に答える