干扰部分的模型

时间:2013-07-12 23:06:37

标签: asp.net asp.net-mvc

所以目前在我的_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并将我的模型保存到那里吗?

1 个答案:

答案 0 :(得分:0)

如果您的部分需要模型,则需要使用部分调用传递它:@Html.Partial("_LoginPartial", aLoginModel)。更难的问题是从哪里获得aLoginModel,并且有一些可能的选择......

  1. 使用@Html.Action(...)推迟单独的控件(可以为您构建LoginModel) - 通常不值得完整控制器生命周期的开销,但如果您能负担得起它是一个干净的解决方案
  2. LoginModel使用一个界面,并要求每个视图模型都实现它 - 几乎肯定不是一个好主意,但它会起作用。
  3. 使用保证在呈现视图之前执行的某种机制将LoginModel存储在ViewBag/ViewData中。
  4. 编写自己的Html帮助程序,知道如何从LoginModel上下文构建HtmlHelper。您可以在_layout中使用该结果(例如@Html.Partial("_LoginPartial", Html.LoginModel))或将Partial调用放在帮助程序中(例如@Html.Login())。
  5. 对于性能至关重要的任何内容,我会使用#4。