• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > 使CheckBoxList的Attributes属性生效(修改微软的一个bug)

使CheckBoxList的Attributes属性生效(修改微软的一个bug)

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了list of attributes,attributes,attributes是什么意思,redirectattributes,@sessionattributes等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
本文将描述如何使CheckBoxList中的Item添加的Attribute在客户端生效,CheckBoxList是一个非常好用的组件,它支持数据绑定等特性。但是他和DropDownList有同样的一个问题,就是当我们向它们的Items里面Add项目的时候,如果希望给这些Item添加客户端行为,这些行为并不能体现在客户端,我们通常使用的方法如下:

HTML页面部分如下:

<asp:CheckBoxList id="CheckBoxList1" runat="server">

       <asp:ListItem Value="1">1</asp:ListItem>

       <asp:ListItem Value="2">2</asp:ListItem>

       <asp:ListItem Value="3">3</asp:ListItem>

</asp:CheckBoxList>

我们在Page_Load里面添加如下代码:

foreach(ListItem item in this.CheckBoxList1.Items){

       item.Attributes.Add("onclick","alert('"+item.Text+"')");

}

这样做的目的是:当我们点击CheckBox的时候希望alert出来我们选中的CheckBox的内容,当然还有其他的一些更有用的应用。但是实际上这段代码是不能正常工作的。我们在客户端点击CheckBox的时候看不到提示信息,同样不论你向Attributs中添加什么都不会有任何反应的。同样的问题也存在于其他的List控件中,比如:DropDownList等。

下面是这个页面呈现的客户端脚本:

<table id="CheckBoxList1" border="0">

       <tr><td><input id="CheckBoxList1_0" type="checkbox" name="CheckBoxList1:0" /><label for="CheckBoxList1_0">1</label></td>

       </tr>

<tr><td><input id="CheckBoxList1_1" type="checkbox" name="CheckBoxList1:1" /><label for="CheckBoxList1_1">2</label></td>

       </tr>

<tr><td><input id="CheckBoxList1_2" type="checkbox" name="CheckBoxList1:2" /><label for="CheckBoxList1_2">3</label></td>

       </tr>

</table>

可以看出来这里并没有我们期望的onclick事件。

       下面我将提供一种方法来完善这个控件,既然是完善,那么我会保持该控件原有的所有特性并修复上面这个bug(我认为应该是一个bug),可能已经有人想到了使用什么方法,对,我将使用继承的方式复用这个控件。并在我们的新控件上做些手脚,使它更好用,我命名这个控件名叫NewCheckBoxList。

       我们首先从分析客户端代码开始,我们发现在服务器上写的代码在客户端没有任何表现,那么怎么才能表现出来呢?这里我将重写该组件的Render方法,来完成最终的目的。下面就描述一下我的思路,首先我会从Render中将本来应该输出到页面的流,输出到一个StringBuilder里面,这样我就有机会编辑这个StringBuilder来完成剩下的工作,获得这个StringBuilder之后我们将按照我们希望的逻辑来为这个字符串添加内容,当内容添加完之后将这个字符串写到控件的输出流中即可。

       下面是控件的实现代码:


 using System;


 using System;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.ComponentModel;

using System.Text;


 namespace Cuike519.Web.UI.WebControls {


 namespace Cuike519.Web.UI.WebControls {

       /// <summary>

       /// Summary description for NewCheckBoxList.

       /// </summary>

       [DefaultProperty("Text"), 

       ToolboxData("<{0}:NewCheckBoxList runat=server></{0}:NewCheckBoxList>")]

       public class NewCheckBoxList : System.Web.UI.WebControls.CheckBoxList {


               protected override void Render(HtmlTextWriter writer) {


               protected override void Render(HtmlTextWriter writer) {

                     StringBuilder sb = new StringBuilder();

                     System.IO.TextWriter tw = new System.IO.StringWriter(sb);

                     HtmlTextWriter OriginalStream = new HtmlTextWriter(tw);

                     base.Render(OriginalStream);

                     string s = sb.ToString();

                     int start = 0;

                     int end = s.Length;

                     for(int i = 0;i< this.Items.Count;i++){

                            start = s.IndexOf("<input",start,end-start);

                            StringBuilder sbItemAttribute = new StringBuilder();

                            this.Items[i].Attributes.Render(new HtmlTextWriter(new System.IO.StringWriter(sbItemAttribute)));

                            s = s.Insert(start+7,sbItemAttribute.ToString()+" ");

                            start = s.IndexOf("/>",start,s.Length-start);

                                     end += sbItemAttribute.Length+1;

                     }

                     writer.Write(s);

              }


       }

}


代码说明如下:

我将构造
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 使CheckBoxList的Attributes属性生效(修改微软的一个bug)

相关文章

  • 2017-05-11ASP.NET中Literal与Label控件的区别
  • 2017-05-11AJAX使用post发送数据xml格式接受数据
  • 2017-05-11.NET MVC中ViewData,ViewBag和TempData的区别浅析
  • 2017-05-11ASP.NET下备份与还原数据库代码
  • 2017-05-11ASP.net(c#)生成条形码 code39条码生成方法
  • 2017-05-11discuz 跨域整合的记录文件
  • 2017-05-11URL中去除指定参数实现C#代码
  • 2017-05-11ASP.NET中MVC从后台控制器传递数据到前台视图的方式
  • 2017-05-11asp.net在iframe中弹出信息并执行跳转问题探讨
  • 2017-05-11.net 弹出消息框后导致页面样式变乱解决方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • .NET Visual Studio 代码性能分析工具
    • Asp.net SignalR 应用并实现群聊功能 开源代码
    • 在ASP.NET 2.0中操作数据之四十九:为GridView控件添加RadioButton
    • asp.net Forms身份验证和基于角色的权限访问
    • asp.net程序编译调试时偶尔出现访问被拒绝的错误的解决方法
    • Repeater控件实现编辑、更新、删除等操作示例代码
    • 在ASP.NET 2.0中操作数据之六十九:处理Computed Columns列
    • Aspnetpager对GridView分页并顺利导出Excel
    • 支持Ajax跨域访问ASP.NET Web Api 2(Cors)的示例教程
    • asp.net图片上传生成缩略图的注意事项

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有