繁体   English   中英

ASP.NET MVC:如何在一个视图之外的所有视图上呈现局部视图?

[英]ASP.NET MVC: How to render a partial view on all but one view?

我有一个名为LogOnUserControl的局部视图/用户控件,该控件显示在网站的边栏中(在Site.Master中定义)。 我还有一个单独的LogOn视图,该视图也呈现LogOnUserControl。

我不希望LogOn视图中有两个LogOnUserControl实例,因为这很容易混淆,所以我目前的想法是包括一个条件,例如

// Semi-pseudocode
if (!Request.IsAuthenticated) && View.Name != "LogOn")

在LogOnUserControl中。

感觉不对,因为部分视图现在知道LogOn视图。 另外,我找不到如何获取View的名称,这加剧了我做错事情的感觉! :-)

编辑:进一步的复杂性是,同一部分视图用于LogOn视图和Site.Master中的侧栏。

您是否考虑过将其他母版页用于登录视图,而侧边栏中没有部分登录? 如果您担心html标记的重复,则可以使用嵌套母版页来避免该问题。

在母版页上,将侧边栏区域的内容与内容区域标签一起包装,并为其指定一个ID,例如SideBarContentArea或其他名称。 这样做是创建一个新的内容区域,您可以选择在基于母版的页面上覆盖该内容区域,并指定默认内容,这些默认内容将在您未在子页面上实现时显示。 现在,在登录页面上,您需要做的就是覆盖SideBarContentArea,并且这次不包括登录控件。

八大兵!

您可以在ViewData中存储一个标志来表明这一点。 您是要强类型输入还是直接访问它取决于您。 因此,在您的母版页上,您可以执行以下操作:

<% if (ViewData["HideLogOnUserControl"] == "Y") { %>
    Insert HTML here
<% } else { %>
    Insert HTML here
<% } %>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM