上一章我們寫了一個最簡單的自定義控件,此次讓我們拋開理論,實際開發(fā)一個具有實用意義的自定義控件:一個可以設(shè)置權(quán)限的菜單。
在這個項目中我們將不采用任何未學到的理論知識,用戶只需要具有基本的dhtml知識就可以。如你所知,服務器控件不過是對一些html及javascript的封裝罷了。至于其它的技巧,將來我們會逐漸提及并應用,最終生產(chǎn)出具有商業(yè)水準的控件來。
制作這個控件的思路很簡單:首先使用dhtml寫出一個菜單來,然后把其中的屬性提取出來,接著封裝起腳本與html顯示代碼,最后將其作為參數(shù)重寫render方法。你看,就這么簡單。
如果不想透過瀏覽器閱讀代碼(那實在很討厭),你可以到如下地址下載這個項目的源碼,其中包括這個自定義控件的源代碼及各類測試文件:不同的數(shù)據(jù)源以及權(quán)限設(shè)定。
http://user1.7host.com/cashtsao//cashmenu0110.zip
首先在名稱空間cashcontrols中聲明一個枚舉類型mainmenualign:
public enum mainmenualign
{
/// <summary>
/// 左
/// </summary>
left=0,
/// <summary>
/// 中間
/// </summary>
center=1,
/// <summary>
/// 右
/// </summary>
right=2
}
接著聲明繼承自webcontrols的類cashmenu,聲明如下變量及屬性:
變量:
private system.web.httpcontext contextobject;
private system.xml.xmldocument oxmldoc=new xmldocument();
private string menudata;
private mainmenualign mainmenualign=mainmenualign.center;
private string rulestring="admin";
private int cellspacing;
private int mainmenuheight;
屬性:
/// <summary>
/// 屬性menudata用于指定數(shù)據(jù)源,可以是某個xml文件,
///也可以是xml格式之字符串
/// </summary>
[bindable(true),
category("data"),description("為menu提供xml數(shù)據(jù)源.")]
public string menudata
{
get
{
return menudata;
}
set
{
menudata = value;
build();
}
}
......
聲明輔助方法:
/// <summary>
/// 方法build用于綁寫數(shù)據(jù)源,將其綁定到context上,在屬性menudata中調(diào)用
/// </summary>
private void build()
{
if (menudata!=null)
try
{
contextobject = this.context;
if (contextobject!=null)
oxmldoc.load(contextobject.server.mappath(menudata));
}
catch
{
try
{
oxmldoc.loadxml(menudata);
}
catch (exception e)
{
contextobject.response.write("打開數(shù)據(jù)源失敗!<br>");
contextobject.response.write(e.message);
}
}
return;
}
/// <summary>
/// 方法generatehtml用于生成html代碼,調(diào)用traversemenutree方法,傳遞context中oxmldoc的一個節(jié)點進去
/// </summary>
/// <returns></returns>
private string generatehtml()
{
string temphtml = "";
if (oxmldoc.childnodes.count !=0)
{
try
{
temphtml = temphtml + traversemenutree(oxmldoc.childnodes.item(1).firstchild);
}
catch
{
throw new argumentexception("發(fā)生錯誤.");
}
}
return(temphtml);
}
|
新聞熱點
疑難解答
圖片精選