当前位置: 代码迷 >> ASP.NET >> 求解GridView1.Rows[i].Attributes["id"]与GridView1.Rows[i].ID的区别?解决办法
  详细解决方案

求解GridView1.Rows[i].Attributes["id"]与GridView1.Rows[i].ID的区别?解决办法

热度:4247   发布时间:2013-02-25 00:00:00.0
求解GridView1.Rows[i].Attributes["id"]与GridView1.Rows[i].ID的区别?
今天在研究ASP。NET与javascript的结合运用,碰到一个问题------
.net里有代码如下:
  for   (int   i   =   0;   i   <   GridView1.Rows.Count;   i++)
{
      //。。。

      GridView1.Rows[i].Attributes[ "id "]   =   "tr "   +   i.ToString();//这里        
                //如果换成   GridView1.Rows[i].ID= "tr "   +   i.ToString();就不行

    //。。。
}
运行后查看页面的html源文件,可以看到:
<tr   id= "tr1 ">
<td>
                                                        <input   id= "GridView1_ctl03_CheckBox1 "   type= "checkbox "   name= "GridView1$ctl03$CheckBox1 "   onclick= "checkme(this,tr1); "   />
                                                        <span   id= "GridView1_ctl03_Label1 "> 综艺 </span>
                                                </td>
</tr>
现在我的疑惑是:
GridView1.Rows[i].Attributes[ "id "]为什么可以控制到客户端html源文件里的值,而GridView1.Rows[i].ID就不可以?


------解决方案--------------------------------------------------------
Attributes
简单点儿说就是给服务器控件添加个js脚本。
就是给DOM元素加一个属性的作用
------解决方案--------------------------------------------------------
比如:
Button1.Attribute.Add( "onclick ", "window.open( 'XXX.aspx ', '_self '); ");
------解决方案--------------------------------------------------------
因为那个id是你加进去的属性,不是本来就有的属性
------解决方案--------------------------------------------------------
WebControl.Attributes 属性
表示获取与控件的属性不对应的【任意特性(html/css/js)】(只用于呈现)的集合。

因为服务器控件,没有提供或者暴露了所有 html 元素的可用属性,故提供 Attributes 供用户自定义

而,Control.ID 属性表示在服务器端【有效】【命名容器(NamingContainer)】的 “ID”,对于【静态】部署在 .aspx 上的控件, .aspx.cs 中同时使用此属性作为【变量名】引用控件实例


GridView1.Rows[i].Attributes[ "id "]为什么可以控制到客户端html源文件里的值,而GridView1.Rows[i].ID就不可以?
============
Control.ID 不与客户端 html 属性直接对应,
Control.UniqueID/Control.ClientID 与 客户端 html 中的 name/id 分别对应,
这两者基于 Control.ID 和 NamingContainer 生成,由 ASP.NET 内部维护,以保证在客户端的唯一性


可以参考:
关于 asp.net 服务器控件几个 ID 的说明
http://www.cnblogs.com/Jinglecat/archive/2007/04/28/730511
------解决方案--------------------------------------------------------
对于 TableRow

1. GridViewRow 继承此类

2. 对应 html tr

但,GridViewRow 默认不会呈现 html tr 的 id,因为可编程角度看,大多数情况下他几乎没有意义
  相关解决方案