因此,目前在我的_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并将我的模型保存到那里吗?
发布于 2013-07-13 09:51:54
如果你的部分需要一个模型,你需要通过部分调用来传递它:@Html.Partial("_LoginPartial", aLoginModel)。更难的问题是从哪里获得aLoginModel,有几个可能的选择……
@Html.Action(...)来遵从一个单独的控件(它可以为你构建一个LoginModel )--通常不值得花费整个控制器生命周期的开销,但如果你负担得起,它是一个干净的解决方案。LoginModel使用一个接口,并要求每个视图模型实现它--几乎肯定不是一个好主意。LoginModel存储在ViewBag/ViewData中,这种机制可以保证在视图被rendered.Html助手,它知道如何从HtmlHelper上下文构建LoginModel。您可以在_layout中使用该结果(例如@Html.Partial("_LoginPartial", Html.LoginModel)),也可以将Partial调用放在帮助器中(例如@Html.Login()).对于任何对性能至关重要的东西,我会使用#4。
https://stackoverflow.com/questions/17625295
复制相似问题