Asp.net 干扰分部词的模型
因此,目前在我的布局文件中,我有一个全局登录和注册系统,它将显示在每个页面上:Asp.net 干扰分部词的模型,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,因此,目前在我的布局文件中,我有一个全局登录和注册系统,它将显示在每个页面上: <div id="global_login_register"> <div id="login"> @Html.Partial("_LoginPartial") </div> <div id="register"> @Html.Partial("_RegisterPartial") </div> </di
<div id="global_login_register">
<div id="login">
@Html.Partial("_LoginPartial")
</div>
<div id="register">
@Html.Partial("_RegisterPartial")
</div>
</div>
@RenderBody()
@Html.Partial(“_LoginPartial”)
@Html.Partial(“_RegisterPartial”)
@RenderBody()
在我的loginPartial页面中,我有一个@model LoginModel,在我的注册表中,我有@model RegisterModel。到目前为止,一切都正常,但问题是当我尝试向View()提交另一个模型时,它会干扰登录部分。解决此问题的唯一方法是使用ViewBag并将我的模型保存到那里吗?如果您的partial需要模型,则需要通过partial调用传递它:
@Html.partial(“\u LoginPartial”,aLoginModel)
。更难的问题是在哪里可以找到aLoginModel
,还有一些可能的选择
@Html.Action(…)
遵从一个单独的控件(可以为您构建LoginModel
)——通常不值得整个控制器生命周期的开销,但如果您负担得起,它是一个干净的解决方案LoginModel
使用一个接口,并要求每个视图模型都实现它——几乎可以肯定这不是一个好主意,但它可以工作LoginModel
存储在ViewBag/ViewData
中,该机制保证在渲染视图之前执行Html
帮助程序,它知道如何从HtmlHelper
上下文构建LoginModel
。您可以在_布局中使用该结果(例如@Html.Partial(“\u LoginPartial”,Html.LoginModel)
),或者将Partial
调用放在帮助程序中(例如@Html.Login()
)对于任何性能关键的问题,我都会使用#4。您不应该使用ViewBag将模型传递给视图。一个选项是创建一个ViewModel,该ViewModel将主模型类、LoginModel和RegisterModel作为属性。这取决于你有多少不同的观点。我需要更多关于您的应用程序的信息,以便为您提供最佳选择。上面的问题是,如果我有另一个控制器页面,我将不得不将它以及模型添加到该ViewModel中。如果我将所有模型放入一个ViewModel类中,会不会有问题?不,您可以为另一个控制器(模型)创建单独的ViewModel。这就是为什么我说这取决于你有多少型号/控制器。但是,即使您有很多控制器,也可以创建一个包含LoginModel和RegisterModel的BaseViewModel,然后使所有其他ViewModel继承自BaseViewModel。您可以发布LoginModel、RegisterModel及其部分视图的代码吗?您知道关于#4的任何优秀教程吗?这正是我需要的。谢谢所有这些信息。还有,为什么#2是个坏主意?第#4的例子:#2可能是个坏主意,因为实现它的唯一合理方法是使用模型基类——每次我这么做,我都会后悔。此外,您还需要在控制器生命周期的某个时刻初始化登录相关状态(可能是一个检查视图模型是否实现该接口的
OnActionExecuted
过滤器)。