当前位置:主页   - 电脑 - 网站开发 - ASP.Net
Discuz!NT控件剖析 之 左侧导航控件
来源:网络   作者:   更新时间:2012-03-10
收藏此页】    【字号    】    【打印】    【关闭

  本文示例源代码或素材下载

  其实这个控件的核心基本都在JS上,而相关的数据绑定和显示却非常简单。而需要说明的是在Discuz!NT的1.0和2.0正式版,这个控件做过一些调整,当然改动也基本上是在JS上,今天给大家的源码是1.0正式版的代码,虽然有些“旧”,但程序本身的思想没变,大家只要明白了这里的源码,有了这碗酒垫底,相信再看即将开源的2.0代码,就会一目了然了。

  好了,废话到此,马上开始今天的话题!

  先请大家看一下这个控件运行时的效果图:

  效果图1:

  Discuz!NT控件剖析 之 左侧导航控件

  效果图2:

  Discuz!NT控件剖析 之 左侧导航控件

  首先将相应的C#代码放出来:

 1Property ScriptPath#region Property ScriptPath
 2
 3  /**//// <summary>
 4  /// Javascript脚本文件所在目录。
 5  /// </summary>
 6  [Description("Javascript脚本文件所在目录。"),DefaultValue("./")]
 7  public string ScriptPath
 8  {
 9 get
10 {
11 object obj = ViewState["NavMenuScriptPath"];
12 return obj == null ? "js/Navbar.js" :(string) obj;
13 }
14 set
15 {
16 ViewState["NavMenuScriptPath"] = value;
17 }
18  }
19
20  #endregion
21
22
23  Property ImageUrl#region Property ImageUrl
24  [Bindable(true), Category("Appearance"), DefaultValue("")]
25  public string ImageUrl
26  {
27 get
28 {
29 if (base.ViewState["NavMenuimageurl"] != null)
30 {
31  return (String)base.ViewState["NavMenuimageurl"];
32 }
33 else
34 {
35  return "images/";//String.Empty;
36 }
37 }
38 set
39 {
40 base.ViewState["NavMenuimageurl"] = value;
41 }
42  }
43
44  #endregion
45
46
47  Property CssPath#region Property CssPath
48
49  /**//// <summary>
50  /// Css文件所在目录。
51  /// </summary>
52  [Description("Javascript脚本文件所在目录。"),DefaultValue("./")]
53  public string CssPath
54  {
55 get
56 {
57 object obj = ViewState["NavMenuCssPath"];
58 return obj == null ? "styles/nav.css" :(string) obj;
59 }
60 set
61 {
62 ViewState["NavMenuCssPath"] = value;
63 }
64  }
65
66  #endregion
67
68
69  Property XmlFileFullPathName#region Property XmlFileFullPathName
70
71  /**//// <summary>
72  /// Xml文件所在目录。
73  /// </summary>
74  [Description("Xml文件所在目录。"),DefaultValue("./")]
75  public string XmlFileFullPathName
76  {
77 get
78 {
79 object obj = ViewState["NavMenuXmlFileFullPathName"];
80 return obj == null ? "xml/navmenu.xml" :(string) obj;
81 }
82 set
83 {
84 ViewState["NavMenuXmlFileFullPathName"] = value;
85 }
86  }
87
88  #endregion
89
90  protected override void OnPreRender(EventArgs e)#region protected override void OnPreRender(EventArgs e)
91  /**//// <summary>
92  /// 重写<see cref="System.Web.UI.Control.OnPreRender"/>方法。
93  /// </summary>
94  /// <param name="e">包含事件数据的 <see cref="EventArgs"/> 对象。</param>
95  protected override void OnPreRender(EventArgs e)
96  {
97    StringBuilder sb = new StringBuilder();
98
99    sb.Append("<script type="text/javascript" src=http://tech.ddvip.com/2008-10/"" + this.ScriptPath + ""></script>rn");
100    sb.Append("<link rel="stylesheet" type="text/css" href=http://tech.ddvip.com/2008-10/"" + this.CssPath + "" />rn");
101    sb.Append("<script type="text/javascript">var imgpath='" + this.ImageUrl + "';</script>rn");
102    sb.Append("<script language="javascript" src=http://tech.ddvip.com/2008-10/"" + this.ScriptPath + ""></script>rn");
103#if NET1
104      if (!Page.IsClientScriptBlockRegistered("NavMenu"))
105      {
106        Page.RegisterClientScriptBlock("NavMenu", sb.ToString());
107      }
108#else
109      if (!Page.ClientScript.IsClientScriptBlockRegistered("NavMenu"))
110      {
111        Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "NavMenu", sb.ToString());
112      }
113#endif
114
115      base.OnPreRender(e);
116    }
117
118    #endregion
119
120 /**//// <summary>
121 /// 将此控件呈现给指定的输出参数。
122 /// </summary>
123 /// <param name="output"> 要写出到的 HTML 编写器 </param>
124 protected override void Render(HtmlTextWriter output)
125 {
126    
127 output.Write("<div class="sdmenu">rn");
128 
129 System.Data.DataSet dsSrc = new System.Data.DataSet();
130 dsSrc.ReadXml(Page.Server.MapPath(this.XmlFileFullPathName));
131
132 int count=0;
133 foreach(System.Data.DataRow dr in dsSrc.Tables[0].Rows)
134 {
135  输出主菜单#region 输出主菜单
136  output.Write(" <table>rn");
137  output.Write("<tr>rn");
138  if(count==0)
139  {
140  output.Write("<td width="196px"><span class="title" id="top">"+
141   dr["menutitle"]+"</span></td>rn");
142  }
143  else
144  {
145  output.Write("<td width="196px"><span class="title">"+
146   dr["menutitle"]+"</span></td>rn");
147  }
148  output.Write("<td><img src=http://tech.ddvip.com/2008-10/""+this.ImageUrl+"/top_level_ico1.gif"
149   class="arrow" /></td>rn");
150  output.Write("</tr>rn");
151  output.Write("</table>rn");
152  #endregion
153
154  输出子菜单#region 输出子菜单
155  output.Write(" <div class="submenu">rn");
156  output.Write("<table>rn");
157  foreach(System.Data.DataRow drs in dsSrc.Tables[1].Select("menuparentid=http://tech.ddvip.com/2008-10/'"+
158    dr["menuid"]+"'"))
159  {
160  
161  output.Write("<tr>rn");
162  if(drs["imgurl"].ToString().Trim()!="")
163  {
164   output.Write(" <td class="lefttd" ><img src=http://tech.ddvip.com/2008-10/""+
165   drs["imgurl"].ToString().Trim()+""
166   class="submenuimg" align="absmiddle"/></td>");
167  }
168  else
169  {
170   output.Write(" <td class="lefttd" ></td>");
171  }
172  if((drs["frameid"].ToString().Trim()=="top")

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明