求解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.html
------解决方案--------------------对于 TableRow
1. GridViewRow 继承此类
2. 对应 html tr
但,GridViewRow 默认不会呈现 html tr 的 id,因为可编程角度看,大多数情况下他几乎没有意义