2009-04-24 71 views
1

我有一个名为LogOnUserControl的局部视图/用户控件,它显示在我的网站上的一个侧栏(在Site.Master中定义)中。我也有一个单独的LogOn视图,它也呈现LogOnUserControl。ASP.NET MVC:如何呈现除一个视图之外的所有视图的局部视图?

我不想在登录鉴于LogOnUserControl的两个实例,因为它只是普通的混乱,所以我现在的想法是,包括在LogOnUserControl的条件,如

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

这感觉不对,因为局部视图现在知道LogOn视图。此外,我无法找到如何获得视图的名称,这增强了我做错事情的感觉! :-)

编辑:还有一个复杂的问题,就是LogOn视图和Site.Master中的侧栏都使用了相同的局部视图。

回答

3

在母版页包边栏区域与内容区域的标签内容,并给它像SideBarContentArea或东西的ID。它所做的是创建一个新的内容区域,您可以选择在基于主服务器的页面上覆盖该区域,并指定当您未在子页面中实施时显示的默认内容。现在在登录页面上,你所要做的就是重写SideBarContentArea,而不是这次包含登录控件。

Bada Bing!

5

您是否考虑过使用不同的母版页进行登录?在侧栏中查看没有登录的部分文件?如果您担心重复的html标记,您可以使用嵌套的母版页来避免该问题。

+1

+1。带上您的母版页,并用另一个ContentPlaceHolder将当前的调用替换为LogOnUserControl。然后创建另外两个母版页,从“Site.master”嵌套的“Main.master”和“Logon.master”。 Main.master会将内容添加到新的ContentPlaceHolder,但Logon.master不会。问题解决了。 – Portman 2009-04-24 23:40:32

+0

我跟着波特曼的评论(+1的细节!:-),但我得到一个错误“无法找到ContentPlaceHolder'MainContent'在母版页'/Views/Shared/LogOn.Master'”。我将LogOn视图设置为使用LogOn.master页面。缺少的ContentPlaceHolder在Site.Master中,LogOn.Master嵌套于...我做错了什么? – alastairs 2009-04-25 21:30:28

2

你可以在ViewData中存储一个标志来表明这一点。无论您想强制输入还是直接访问,都取决于您。因此,您的主页上,你可以有这样的:

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