基于ASP.NET的JQueryUI控件开发(4) - JQTab和JQAccordion
2010-08-05 08:59
459 查看
先上图:
设计思路:
参照ASP.NET控件MultiView的使用方法,在MultiView中可以放多个View
Code:
[Designer("System.Web.UI.Design.WebControls.MultiViewDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
public class JQTabPanel : Panel
{
string headerTitle;
//标题
public string HeaderTitle
{
get
{
if (string.IsNullOrEmpty(headerTitle))
{
if (!string.IsNullOrEmpty(ToolTip))
return ToolTip;
return this.ClientID;
}
return headerTitle;
}
set { headerTitle = value; }
}
}
[ParseChildren(typeof(JQTabPanel)),
Designer("System.Web.UI.Design.WebControls.MultiViewDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"),
AspNetHostingPermission(SecurityAction.LinkDemand,
Level = AspNetHostingPermissionLevel.Minimal),
AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public class JQTab:Panel
{
//增加子选项卡
protected override void AddParsedSubObject(object obj)
{
if (obj is JQTabPanel)
{
this.Controls.Add(obj as Control);
}
else
{
if (!(obj is LiteralControl))
throw new Exception("只能使用JQTabPanel控件!");
}
}
//呈现之前处理
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
StringBuilder sb = new StringBuilder();
sb.Append("<ul>");
for (int i = 0; i < this.Controls.Count; i++)
{
if (this.Controls[i] is JQTabPanel)
{
var tp = this.Controls[i] as JQTabPanel;
sb.AppendFormat("<li><a href='#{0}'>{1}</a></li>",tp.ClientID,tp.HeaderTitle);
}
}
sb.Append("</ul>");
Literal lit = new Literal();
lit.Text = sb.ToString();
this.Controls.AddAt(0, lit);
}
public override void RenderEndTag(HtmlTextWriter writer)
{
base.RenderEndTag(writer);
string config = "";
if (config.Length > 0)
{
config = config.Substring(0, config.Length - 1);
config = "{" + config + "}";
}
writer.Write("/n<script>$('#" + this.ClientID + "').tabs(" + config + ");</script>/n");
}
}
两个类,一个是Tab和一个TabPanel
使用时ASP.NET的标记如下:
Code:
<cc1:JQTab ID="JQTab1" runat="server">
<cc1:JQTabPanel ID="JQTabPanel1" runat="server" HeaderTitle="选项卡一">
选项卡一<br />
选项卡一<br />
选项卡一<br />
选项卡一<br />
选项卡一<br />
选项卡一
</cc1:JQTabPanel>
<cc1:JQTabPanel ID="JQTabPanel2" runat="server" HeaderTitle="选项卡二">
选项卡二<br />
选项卡二<br />
选项卡二<br />
选项卡二<br />
选项卡二<br />
选项卡二
</cc1:JQTabPanel>
<cc1:JQTabPanel ID="JQTabPanel3" runat="server" HeaderTitle="选项卡三">
选项卡三<br />
选项卡三<br />
选项卡三<br />
选项卡三<br />
选项卡三<br />
选项卡三
</cc1:JQTabPanel>
</cc1:JQTab>
生成的客户端HTML如下:
Code:
<div id="JQTab1">
<ul><li><a href='#JQTabPanel1'>选项卡一</a></li><li><a href='#JQTabPanel2'>选项卡二</a></li><li><a href='#JQTabPanel3'>选项卡三</a></li></ul><div id="JQTabPanel1">
选项卡一<br />
选项卡一<br />
选项卡一<br />
选项卡一<br />
选项卡一<br />
选项卡一
</div><div id="JQTabPanel2">
选项卡二<br />
选项卡二<br />
选项卡二<br />
选项卡二<br />
选项卡二<br />
选项卡二
</div><div id="JQTabPanel3">
选项卡三<br />
选项卡三<br />
选项卡三<br />
选项卡三<br />
选项卡三<br />
选项卡三
</div>
</div>
<script>$('#JQTab1').tabs();</script>
即可实现!
相同道理即可以实现JQAccordion功能
效果图:
ASP.NET界面效果:
源代码和Tab类似,如下:有两个类一个是JQAccordion一个是JQAccordionPanel
Code:
[Designer("System.Web.UI.Design.WebControls.MultiViewDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
public class JQAccordionPanel : Panel
{
private string title;
public string Title
{
get { return title; }
set { title = value; }
}
public override void RenderBeginTag(HtmlTextWriter writer)
{
if (string.IsNullOrEmpty(title)) title = this.ClientID;
writer.Write("/n<h3><a href=/"#/">" + title + "</a></h3>/n");
base.RenderBeginTag(writer);
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
}
}
[ParseChildren(typeof(JQAccordionPanel)),
Designer("System.Web.UI.Design.WebControls.MultiViewDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"),
AspNetHostingPermission(SecurityAction.LinkDemand,
Level = AspNetHostingPermissionLevel.Minimal),
AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public class JQAccordion:Panel
{
private int activeIndex = 0;
public int ActiveIndex
{
get { return activeIndex; }
set { activeIndex = value; }
}
protected override void AddParsedSubObject(object obj)
{
if (obj is JQAccordionPanel)
{
this.Controls.Add(obj as Control);
}
else
{
if(!(obj is LiteralControl))
throw new Exception("只能使用JQAccordionPanel控件!");
}
}
private Effect animated=Effect.None;
public Effect Animated
{
get { return animated; }
set { animated = value; }
}
private bool collapsible;
public bool Collapsible
{
get { return collapsible; }
set { collapsible = value; }
}
public override void RenderEndTag(HtmlTextWriter writer)
{
base.RenderEndTag(writer);
string config = "";
if (animated != Effect.None)
{
config += "animated:'" + animated.ToString().ToLower() + "',";
}
config += "active:" + activeIndex+",";
config += "collapsible:" + collapsible.ToString().ToLower() + ",";
if (config.Length > 0)
{
config = config.Substring(0, config.Length - 1);
config = "{" + config + "}";
}
writer.Write("/n<script>$('#"+this.ClientID+"').accordion("+config+");</script>/n");
}
}
ASP.NET使用代码:
Code:
<cc1:JQAccordion ID="JQAccordion1" runat="server">
<cc1:JQAccordionPanel ID="JQAccordionPanel1" runat="server" Title="测试一">
测试一<br />
测试一<br />
测试一
</cc1:JQAccordionPanel>
<cc1:JQAccordionPanel ID="JQAccordionPanel2" runat="server" Title="测试二">
测试二<br />
测试二<br />
测试二
</cc1:JQAccordionPanel>
<cc1:JQAccordionPanel ID="JQAccordionPanel3" runat="server" Title="测试三">
测试三<br />
测试三<br />
测试三
</cc1:JQAccordionPanel>
</cc1:JQAccordion>
生成客户端HTML代码:
Code:
<div id="JQAccordion1">
<h3><a href="#">测试一</a></h3>
<div id="JQAccordionPanel1">
测试一<br />
测试一<br />
测试一
</div>
<h3><a href="#">测试二</a></h3>
<div id="JQAccordionPanel2">
测试二<br />
测试二<br />
测试二
</div>
<h3><a href="#">测试三</a></h3>
<div id="JQAccordionPanel3">
测试三<br />
测试三<br />
测试三
</div>
</div>
<script>$('#JQAccordion1').accordion({active:0,collapsible:false});</script>
完工,待续...
设计思路:
参照ASP.NET控件MultiView的使用方法,在MultiView中可以放多个View
Code:
[Designer("System.Web.UI.Design.WebControls.MultiViewDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
public class JQTabPanel : Panel
{
string headerTitle;
//标题
public string HeaderTitle
{
get
{
if (string.IsNullOrEmpty(headerTitle))
{
if (!string.IsNullOrEmpty(ToolTip))
return ToolTip;
return this.ClientID;
}
return headerTitle;
}
set { headerTitle = value; }
}
}
[ParseChildren(typeof(JQTabPanel)),
Designer("System.Web.UI.Design.WebControls.MultiViewDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"),
AspNetHostingPermission(SecurityAction.LinkDemand,
Level = AspNetHostingPermissionLevel.Minimal),
AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public class JQTab:Panel
{
//增加子选项卡
protected override void AddParsedSubObject(object obj)
{
if (obj is JQTabPanel)
{
this.Controls.Add(obj as Control);
}
else
{
if (!(obj is LiteralControl))
throw new Exception("只能使用JQTabPanel控件!");
}
}
//呈现之前处理
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
StringBuilder sb = new StringBuilder();
sb.Append("<ul>");
for (int i = 0; i < this.Controls.Count; i++)
{
if (this.Controls[i] is JQTabPanel)
{
var tp = this.Controls[i] as JQTabPanel;
sb.AppendFormat("<li><a href='#{0}'>{1}</a></li>",tp.ClientID,tp.HeaderTitle);
}
}
sb.Append("</ul>");
Literal lit = new Literal();
lit.Text = sb.ToString();
this.Controls.AddAt(0, lit);
}
public override void RenderEndTag(HtmlTextWriter writer)
{
base.RenderEndTag(writer);
string config = "";
if (config.Length > 0)
{
config = config.Substring(0, config.Length - 1);
config = "{" + config + "}";
}
writer.Write("/n<script>$('#" + this.ClientID + "').tabs(" + config + ");</script>/n");
}
}
两个类,一个是Tab和一个TabPanel
使用时ASP.NET的标记如下:
Code:
<cc1:JQTab ID="JQTab1" runat="server">
<cc1:JQTabPanel ID="JQTabPanel1" runat="server" HeaderTitle="选项卡一">
选项卡一<br />
选项卡一<br />
选项卡一<br />
选项卡一<br />
选项卡一<br />
选项卡一
</cc1:JQTabPanel>
<cc1:JQTabPanel ID="JQTabPanel2" runat="server" HeaderTitle="选项卡二">
选项卡二<br />
选项卡二<br />
选项卡二<br />
选项卡二<br />
选项卡二<br />
选项卡二
</cc1:JQTabPanel>
<cc1:JQTabPanel ID="JQTabPanel3" runat="server" HeaderTitle="选项卡三">
选项卡三<br />
选项卡三<br />
选项卡三<br />
选项卡三<br />
选项卡三<br />
选项卡三
</cc1:JQTabPanel>
</cc1:JQTab>
生成的客户端HTML如下:
Code:
<div id="JQTab1">
<ul><li><a href='#JQTabPanel1'>选项卡一</a></li><li><a href='#JQTabPanel2'>选项卡二</a></li><li><a href='#JQTabPanel3'>选项卡三</a></li></ul><div id="JQTabPanel1">
选项卡一<br />
选项卡一<br />
选项卡一<br />
选项卡一<br />
选项卡一<br />
选项卡一
</div><div id="JQTabPanel2">
选项卡二<br />
选项卡二<br />
选项卡二<br />
选项卡二<br />
选项卡二<br />
选项卡二
</div><div id="JQTabPanel3">
选项卡三<br />
选项卡三<br />
选项卡三<br />
选项卡三<br />
选项卡三<br />
选项卡三
</div>
</div>
<script>$('#JQTab1').tabs();</script>
即可实现!
相同道理即可以实现JQAccordion功能
效果图:
ASP.NET界面效果:
源代码和Tab类似,如下:有两个类一个是JQAccordion一个是JQAccordionPanel
Code:
[Designer("System.Web.UI.Design.WebControls.MultiViewDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
public class JQAccordionPanel : Panel
{
private string title;
public string Title
{
get { return title; }
set { title = value; }
}
public override void RenderBeginTag(HtmlTextWriter writer)
{
if (string.IsNullOrEmpty(title)) title = this.ClientID;
writer.Write("/n<h3><a href=/"#/">" + title + "</a></h3>/n");
base.RenderBeginTag(writer);
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
}
}
[ParseChildren(typeof(JQAccordionPanel)),
Designer("System.Web.UI.Design.WebControls.MultiViewDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"),
AspNetHostingPermission(SecurityAction.LinkDemand,
Level = AspNetHostingPermissionLevel.Minimal),
AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public class JQAccordion:Panel
{
private int activeIndex = 0;
public int ActiveIndex
{
get { return activeIndex; }
set { activeIndex = value; }
}
protected override void AddParsedSubObject(object obj)
{
if (obj is JQAccordionPanel)
{
this.Controls.Add(obj as Control);
}
else
{
if(!(obj is LiteralControl))
throw new Exception("只能使用JQAccordionPanel控件!");
}
}
private Effect animated=Effect.None;
public Effect Animated
{
get { return animated; }
set { animated = value; }
}
private bool collapsible;
public bool Collapsible
{
get { return collapsible; }
set { collapsible = value; }
}
public override void RenderEndTag(HtmlTextWriter writer)
{
base.RenderEndTag(writer);
string config = "";
if (animated != Effect.None)
{
config += "animated:'" + animated.ToString().ToLower() + "',";
}
config += "active:" + activeIndex+",";
config += "collapsible:" + collapsible.ToString().ToLower() + ",";
if (config.Length > 0)
{
config = config.Substring(0, config.Length - 1);
config = "{" + config + "}";
}
writer.Write("/n<script>$('#"+this.ClientID+"').accordion("+config+");</script>/n");
}
}
ASP.NET使用代码:
Code:
<cc1:JQAccordion ID="JQAccordion1" runat="server">
<cc1:JQAccordionPanel ID="JQAccordionPanel1" runat="server" Title="测试一">
测试一<br />
测试一<br />
测试一
</cc1:JQAccordionPanel>
<cc1:JQAccordionPanel ID="JQAccordionPanel2" runat="server" Title="测试二">
测试二<br />
测试二<br />
测试二
</cc1:JQAccordionPanel>
<cc1:JQAccordionPanel ID="JQAccordionPanel3" runat="server" Title="测试三">
测试三<br />
测试三<br />
测试三
</cc1:JQAccordionPanel>
</cc1:JQAccordion>
生成客户端HTML代码:
Code:
<div id="JQAccordion1">
<h3><a href="#">测试一</a></h3>
<div id="JQAccordionPanel1">
测试一<br />
测试一<br />
测试一
</div>
<h3><a href="#">测试二</a></h3>
<div id="JQAccordionPanel2">
测试二<br />
测试二<br />
测试二
</div>
<h3><a href="#">测试三</a></h3>
<div id="JQAccordionPanel3">
测试三<br />
测试三<br />
测试三
</div>
</div>
<script>$('#JQAccordion1').accordion({active:0,collapsible:false});</script>
完工,待续...
相关文章推荐
- 基于ASP.NET的JQueryUI控件开发(1) - JQueryScriptManager
- 基于ASP.NET MVC的JQueryUI控件开发(3) - Accordion控件设计
- 基于ASP.NET的JQueryUI控件开发(2) - JQSlider
- 基于ASP.NET MVC的JQueryUI控件开发(4) - DLL封装
- 基于ASP.NET的JQueryUI控件开发(3) - JQDialog
- 基于ASP.NET MVC的JQueryUI控件开发(1)
- 基于ASP.NET MVC的JQueryUI控件开发(2) - Tab控件设计
- ★★★【庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术--基于VS 2008(兼容VS 2005)/C#】★★★
- 《庖丁解牛:纵向切入ASP.NET 3.5控件和组件开发技术》 --- 基于VS 2008(兼容VS 2005)/C#
- 书讯 —《庖丁解牛:纵向切入ASP.NET 3.5控件和组件开发技术》第二版
- asp.net控件开发基础(3) ----------自定义控件事件处理
- [导入]Asp.net 2.0 自定义控件开发[创建自定义HeaderRow的GridView控件][示例代码下载]
- ASP.NET动态网站开发培训-11.DetailsView控件
- 基于 jQuery 的专业 ASP.NET WebForms/MVC 控件库!
- Asp.net 2.0控件开发相关调试(JavaScript调试和自定义控件设计时调试)
- {Clingingboy}asp.net控件开发基础
- 基于多线程和SOCKET的聊天室(原创附源码)【没有控件的ASP.NET】
- 基于ASP.NET与XML的网络硬盘开发
- asp.net控件开发基础(2) -- Render的重写
- ASP.NET 2.0服务器控件开发的基本概念