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. 使用一些保证在您的视图被呈现之前执行的机制来存储LoginModelin 。ViewBag/ViewData
  4. 编写您自己的Html助手,该助手知道如何LoginModelHtmlHelper上下文构建。您可以在 _layout 中使用该结果(例如@Html.Partial("_LoginPartial", Html.LoginModel)),也可以将Partial调用放在帮助程序中(例如@Html.Login())。

对于任何对性能至关重要的东西,我会使用#4。

于 2013-07-13T01:51:54.227 回答