前些天已
经实现
了
该
控
件,但
当时
是把所有可能的
WebApplication
都
Hardcode
在代
码
里了。
考
虑
到后续扩展和变更的需要,同时也简化开发和调用,我稍微做了些改动,在控件中只封装一个
WebApplication
及其下面的
SiteCollection
。另外,在应用该控件的时候遇到一个棘手的问题,即:浮动菜单遇到
select
等控件时,层叠顺序不正确。查资料发现这是
IE6.0
及以下版本的一个
Bug
。尝试了很久才把问题解决,呵呵,其实很简单,是我太笨!另外,控件集成了MOSS2007的访问权限控制,没有网站访问权限的用户将不会看到该网站的链接项。
<%
@ Control Language
=
"
C#
"
ClassName
=
"
GlobalNavigator
"
%>
<%
@ Import Namespace
=
"
System
"
%>
<%
@ Import Namespace
=
"
System.Collections
"
%>
<%
@ Import Namespace
=
"
System.Web.UI
"
%>
<%
@ Import Namespace
=
"
System.Web.UI.WebControls
"
%>
<%
@ Import Namespace
=
"
Microsoft.SharePoint
"
%>
<%
@ Import Namespace
=
"
Microsoft.SharePoint.Administration
"
%>
![](/Images/OutliningIndicators/None.gif)
<
script runat
=
"
server
"
>
![](/Images/OutliningIndicators/None.gif)
private
string
webAppName
=
string
.Empty;
private
bool
visable
=
true
;
private
string
text
=
"
SP Sites
"
;
private
string
itemCssClass
=
string
.Empty;
private
string
menuCssClass
=
string
.Empty;
private
string
normalCssClass
=
string
.Empty;
private
string
activeCssClass
=
string
.Empty;
private
string
mLeaveScript
=
string
.Empty;
private
string
mEnterScript
=
string
.Empty;
private
string
mClickScript
=
string
.Empty;
![](/Images/OutliningIndicators/None.gif)
protected
void
Page_Load(
object
sender, EventArgs e)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
if (!Page.IsPostBack)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
try
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
mLeaveScript = "document.getElementById('{0}').className = '{1}'; document.getElementById('{2}').style.display = 'none';";
mEnterScript = "document.getElementById('{0}').className = '{1}';";
mClickScript = "document.getElementById('{0}').style.display = 'block';";
pnlItem.Attributes.Add("onmouseleave", string.Format(mLeaveScript, lblWebApp.ClientID, normalCssClass, pnlMenuHold.ClientID));
lblWebApp.Attributes.Add("onmouseenter", string.Format(mEnterScript, lblWebApp.ClientID, activeCssClass));
lblWebApp.Attributes.Add("onclick", string.Format(mClickScript, pnlMenuHold.ClientID));
![](/Images/OutliningIndicators/InBlock.gif)
pnlItem.Visible = visable;
pnlItem.CssClass = itemCssClass;
lblWebApp.CssClass = normalCssClass;
lblWebApp.Text = text;
pnlMenu.CssClass = menuCssClass;
![](/Images/OutliningIndicators/InBlock.gif)
dlWebSites.DataSource = GetSiteList(webAppName);
dlWebSites.DataBind();
}
catch (Exception ex)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
lblWebApp.Text = ex.Message;
}
}
}
![](/Images/OutliningIndicators/None.gif)
public
string
WebAppName
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{ return webAppName; }
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{ webAppName = value; }
}
![](/Images/OutliningIndicators/None.gif)
public
bool
Visable
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{ return visable; }
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{ visable = value; }
}
![](/Images/OutliningIndicators/None.gif)
public
string
Text
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{ return text; }
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{ text = value; }
}
![](/Images/OutliningIndicators/None.gif)
public
string
ItemCssClass
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{ return itemCssClass; }
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{ itemCssClass = value; }
}
![](/Images/OutliningIndicators/None.gif)
public
string
MenuCssClass
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{ return menuCssClass; }
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{ menuCssClass = value; }
}
![](/Images/OutliningIndicators/None.gif)
public
string
NormalCssClass
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{ return normalCssClass; }
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{ normalCssClass = value; }
}
![](/Images/OutliningIndicators/None.gif)
public
string
ActiveCssClass
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{ return activeCssClass; }
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{ activeCssClass = value; }
}
![](/Images/OutliningIndicators/None.gif)
private
ArrayList GetSiteList(
string
appName)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
ArrayList siteList = new ArrayList();
SPWebServiceCollection webServices = new SPWebServiceCollection(SPFarm.Local);
![](/Images/OutliningIndicators/InBlock.gif)
foreach (SPWebService webService in webServices)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
foreach (SPWebApplication webApp in webService.WebApplications)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if (webApp.IsAdministrationWebApplication || webApp.Name != appName)
continue;
![](/Images/OutliningIndicators/InBlock.gif)
foreach (SPSite site in webApp.Sites)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
SPWeb web = null;
SPBasePermissions openRight = SPBasePermissions.Open;
SPBasePermissions viewRight = SPBasePermissions.Open;
SPSecurity.RunWithElevatedPrivileges(delegate()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
using (SPSite tempSite = new SPSite(site.ID))
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
web = tempSite.RootWeb;
openRight = SPBasePermissions.Open;
viewRight = SPBasePermissions.ViewPages;
}
}
);
![](/Images/OutliningIndicators/InBlock.gif)
string loginName = SPContext.Current.Web.CurrentUser.LoginName;
//siteList.Add(new WebSiteInfo(web.Description, site.Url));
if (web.DoesUserHavePermissions(loginName, SPBasePermissions.Open) && web.DoesUserHavePermissions(loginName, SPBasePermissions.ViewPages))
siteList.Add(new WebSiteInfo((web.Description == string.Empty) ? web.Title : web.Description, site.Url));
}
}
}
![](/Images/OutliningIndicators/InBlock.gif)
return siteList;
}
![](/Images/OutliningIndicators/None.gif)
class
WebSiteInfo
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
private string siteTitle;
private string siteUrl;
![](/Images/OutliningIndicators/InBlock.gif)
public WebSiteInfo(string siteTitle, string siteUrl)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
this.siteTitle = siteTitle;
this.siteUrl = siteUrl;
}
![](/Images/OutliningIndicators/InBlock.gif)
public string SiteTitle
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{ return siteTitle; }
}
![](/Images/OutliningIndicators/InBlock.gif)
public string SiteUrl
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{ return siteUrl; }
}
}
</
script
>
![](/Images/OutliningIndicators/None.gif)
<
asp:Panel ID
=
"
pnlItem
"
runat
=
"
server
"
>
<
asp:Label ID
=
"
lblWebApp
"
runat
=
"
server
"
Text
=
"
SP Sites
"
></
asp:Label
><
br
/>
<
asp:Panel ID
=
"
pnlMenuHold
"
runat
=
"
server
"
Style
=
"
display: none; position: absolute;
z
-
index:
20
;
"
>
<
iframe style
=
"
position: absolute; z-index: -1; filter: alpha(opacity=0);
"
></
iframe
>
<
asp:Panel ID
=
"
pnlMenu
"
runat
=
"
server
"
>
<
asp:DataList ID
=
"
dlWebSites
"
runat
=
"
server
"
RepeatLayout
=
"
Flow
"
>
<
ItemTemplate
>
<
asp:HyperLink ID
=
"
HyperLink1
"
NavigateUrl
=
'
<%# DataBinder.Eval(Container, "DataItem.SiteUrl")%>
'
runat
=
"
server
"
Width
=
"
100%
"
><%
# DataBinder.Eval(Container,
"
DataItem.SiteTitle
"
)
%></
asp:HyperLink
>
</
ItemTemplate
>
</
asp:DataList
>
</
asp:Panel
>
</
asp:Panel
>
</
asp:Panel
>
转载于:https://www.cnblogs.com/easyjacky/articles/1024574.html