所以目前在我的_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并将我的模型保存到那里吗?
答案 0 :(得分:0)
如果您的部分需要模型,则需要使用部分调用传递它:@Html.Partial("_LoginPartial", aLoginModel)
。更难的问题是从哪里获得aLoginModel
,并且有一些可能的选择......
@Html.Action(...)
推迟单独的控件(可以为您构建LoginModel
) - 通常不值得完整控制器生命周期的开销,但如果您能负担得起它是一个干净的解决方案LoginModel
使用一个界面,并要求每个视图模型都实现它 - 几乎肯定不是一个好主意,但它会起作用。LoginModel
存储在ViewBag/ViewData
中。Html
帮助程序,知道如何从LoginModel
上下文构建HtmlHelper
。您可以在_layout中使用该结果(例如@Html.Partial("_LoginPartial", Html.LoginModel)
)或将Partial
调用放在帮助程序中(例如@Html.Login()
)。对于性能至关重要的任何内容,我会使用#4。