📄 webserviceboxlist.cs
字号:
namespace ASPNET.StarterKit.Communities {
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using ASPNET.StarterKit.Communities.Services;
using System.Web.Security;
using System.Collections;
//*********************************************************************
//
// WebServiceBoxList Class
//
// This control displays a list of Web service boxes enabled
// for a particular section.
//
//*********************************************************************
public class WebServiceBoxList : SkinnedCommunityControl {
string _skinFileName = "Services_WebServiceBoxList.ascx";
Repeater rptBoxes;
//*********************************************************************
//
// WebServiceBoxList Constructor
//
// Calls the base SkinnedCommunityControl constructor
// and assigns the default page skin.
//
//*********************************************************************
public WebServiceBoxList() : base() {
// Assign a default skin file name
if (SkinFileName == null)
SkinFileName = _skinFileName;
}
//*********************************************************************
//
// SkinType Property
//
// Specifies the skins directory where this page's skin file is located.
//
//*********************************************************************
override protected string SkinType {
get { return "ControlSkins"; }
}
//*********************************************************************
//
// InitializeSkin Method
//
// Retrieves all the controls from the page skin.
//
//*********************************************************************
override protected void InitializeSkin(Control skin) {
// Find Web Service Boxes repeater
rptBoxes = (Repeater)GetControl(skin, "rptWebServiceBoxes");
rptBoxes.ItemDataBound += new RepeaterItemEventHandler(Boxes_ItemDataBound);
}
//*********************************************************************
//
// OnLoad Method
//
// Iterates through all the services and attempts
// to get a response. If the service is dead, the service
// is skipped.
//
//*********************************************************************
override protected void OnLoad(EventArgs e) {
ArrayList colWebServiceBoxes;
ArrayList colServiceResponses = new ArrayList();
ServiceResponseInfo responseInfo;
if (objSectionInfo.WebServiceBoxes.Length > 0) {
colWebServiceBoxes = CalculateWebServiceBoxes(objSectionInfo.WebServiceBoxes);
foreach (string box in colWebServiceBoxes) {
try {
responseInfo = ServiceUtility.GetServiceResponseInfo(box);
} catch (Exception ex) {
ActivityUtility.RecordError("Service call failed: " + box, ex);
responseInfo = null;
}
if (responseInfo != null)
colServiceResponses.Add(responseInfo);
}
EnsureChildControls();
rptBoxes.DataSource = colServiceResponses;
rptBoxes.DataBind();
}
}
//*********************************************************************
//
// Boxes_ItemDataBound Method
//
// Binds each Web service box to the top-level rptBoxes
// Repeater control. We are using nested Repeaters here. One
// Repeater lists the Web Service Boxes, the nested Repeater
// displays Web Service Box items.
//
//*********************************************************************
void Boxes_ItemDataBound(Object s, RepeaterItemEventArgs e) {
// Don't do any binding in header or footer
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
Repeater rptBox;
HyperLink lnkServiceTitle;
Label lblServiceDescription;
Label lblServiceCopyright;
Label lblDateLastRefreshed;
HyperLink lnkServiceImage;
// Get the service response
ServiceResponseInfo responseInfo = (ServiceResponseInfo)e.Item.DataItem;
// Find Service Title Link
lnkServiceTitle = (HyperLink)GetControl(e.Item, "lnkServiceTitle");
lnkServiceTitle.Text = responseInfo.ServiceTitle;
lnkServiceTitle.NavigateUrl = responseInfo.ServiceLink;
// Find Service Description
lblServiceDescription = (Label)GetControl(e.Item, "lblServiceDescription");
lblServiceDescription.Text = responseInfo.ServiceDescription;
// Find Service Copyright
lblServiceCopyright = (Label)GetControl(e.Item, "lblServiceCopyright");
lblServiceCopyright.Text = responseInfo.ServiceCopyright;
// Find Date Last Refreshed Label
lblDateLastRefreshed = (Label)GetControl(e.Item, "lblDateLastRefreshed");
lblDateLastRefreshed.Text = String.Format("{0} {1}", lblDateLastRefreshed.Text, responseInfo.DateLastRefreshed);
// Find the Service Image
lnkServiceImage = (HyperLink)GetControl(e.Item, "lnkServiceImage");
if (responseInfo.ServiceImageUrl != String.Empty) {
lnkServiceImage.ImageUrl = responseInfo.ServiceImageUrl;
lnkServiceImage.NavigateUrl = responseInfo.ServiceImageLink;
lnkServiceImage.ToolTip = responseInfo.ServiceImageTitle;
}
// Find Web Service Box repeater
rptBox = (Repeater)GetControl(e.Item, "rptWebServiceBox");
rptBox.ItemDataBound += new RepeaterItemEventHandler(Box_ItemDataBound);
rptBox.DataSource = responseInfo.Items;
rptBox.DataBind();
}
}
//*********************************************************************
//
// Box_ItemDataBound Method
//
// Displays each service response item in the nested Repeater.
//
//*********************************************************************
void Box_ItemDataBound(Object s, RepeaterItemEventArgs e) {
// Don't do any binding in header or footer
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
HyperLink lnkItemTitle;
Label lblItemDescription;
// Get the Response Info Item from Data Item
ServiceResponseInfoItem responseInfoItem = (ServiceResponseInfoItem)e.Item.DataItem;
// Find the Title link
lnkItemTitle = (HyperLink)GetControl(e.Item, "lnkItemTitle");
lnkItemTitle.Text = responseInfoItem.Title;
lnkItemTitle.NavigateUrl = responseInfoItem.Link;
// Find Description
lblItemDescription = (Label)GetControl(e.Item, "lblItemDescription");
lblItemDescription.Text = Context.Server.HtmlDecode(responseInfoItem.Description);
}
}
//*********************************************************************
//
// CalculateWebServiceBoxes Method
//
// Determines which Web service boxes are displayed based on
// the section WebServiceBoxDisplayMode property.
//
//*********************************************************************
private ArrayList CalculateWebServiceBoxes(string[] webServiceBoxes) {
int intItem = 0;
ArrayList colArrayList = new ArrayList(webServiceBoxes);
// show all
if (objSectionInfo.WebServiceBoxDisplayMode == 0)
return colArrayList;
// Calculate number of boxes to display
int displayCount = Math.Min(objSectionInfo.WebServiceBoxDisplayMode, colArrayList.Count);
// Get correct number of WebBoxes
Random objRan = new Random();
ArrayList colNewArrayList = new ArrayList();
for (int i=0;i<displayCount;i++) {
intItem = objRan.Next(colArrayList.Count);
colNewArrayList.Add(colArrayList[intItem]);
colArrayList.RemoveAt(intItem);
}
return colNewArrayList;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -