《asp.net 2.0应用开发技术》 笔记 02

第2章  ASP.NET 2.0服务器控件

1.值得注意的是,HtmlInputButton控件可以执行服务器端的click事件,需要注明是 onserverclick,默认的onclick事件是客户端事件
   web服务器控件正好相反,onclick 事件是服务端事件,要执行客户端事件要注明是OnClientClick.
2.在使用HTML服务器控件(Web服务器控件一样),请注意区分ClientID与UniqueID的区别,在母版页、自定义控件和控件嵌套中需要特别注意他们的含义和使用方法。
以下例子描述了这些表好似的含义和规则。
<%@ Import Namespace="System.Data" %>
<%@ Page language="c#" Codebehind="WebForm3.aspx.cs" AutoEventWireup="false" Inherits="Incentive2008.WebForm3" %>
<HTML>
    
<HEAD>
        
<title>WebForm3</title>
        
<script runat="server">
        
void Page_Load(object sender, System.EventArgs e)
        
{
            
if(!Page.IsPostBack)
            
{
                DataTable dt
=new DataTable();
                DataRow dr;
                dt.Columns.Add(
new DataColumn("ButtonValue",typeof(string)));
                
for(int i=0;i<3;i++)
                
{
                    dr
=dt.NewRow();
                    dr[
0]="按钮"+i.ToString();
                    dt.Rows.Add(dr);
                }

                Repeater1.DataSource
=new DataView(dt);                
                Repeater1.DataBind();
            }
            
        }

void Submit1_Click(Object sender,EventArgs e)
{
    Message.Text
="<li>HtmlInputControl 的 Name 属性值:"+((HtmlInputControl)sender).Name;
    Message.Text
="<li>HtmlInputControl 的 ID 属性值:"+((HtmlInputControl)sender).ID;
    Message.Text
="<li>HtmlInputControl 的 UniqueID 属性值:"+((HtmlInputControl)sender).UniqueID;
    Message.Text
="<li>HtmlInputControl 的 ClientID 属性值:"+((HtmlInputControl)sender).ClientID;
    Message.Text
="<li>HtmlInputControl 的 NamingContainer 属性值:"+((HtmlInputControl)sender).NamingContainer.UniqueID;
    Message.Text
="<li>HtmlInputControl 的 NamingContainer的ParentID 属性值:"+((HtmlInputControl)sender).NamingContainer.Parent.ID;
}

        
</script>
    
</HEAD>
    
<body MS_POSITIONING="GridLayout">
        
<form id="Form1" method="post" runat="server">
            
<asp:Repeater id="Repeater1" runat="server">
                
<ItemTemplate>
                    
<input id="Submit1" type=submit name="AddButton" value='<%# Eval("ButtonValue")%>' onserverclick="Submit1_Click" runat=server>
                
</ItemTemplate>
            
</asp:Repeater>
            
<br>
            
<br>
            
<asp:Label ID="Message" Runat="server" />
        
</form>
    
</body>
</HTML>

运行上面的程序,查看客户端生成的源代码,可以发现,虽然给按钮指定了ID属性和name属性,但是客户端的ID和name并不是
我们指定的,源代码如下:
<input name="Repeater1$ctl0$Submit1" id="Repeater1__ctl0_Submit1" type="submit" value="按钮0" />
<input name="Repeater1$ctl1$Submit1" id="Repeater1__ctl1_Submit1" type="submit" value="按钮1" />
<input name="Repeater1$ctl2$Submit1" id="Repeater1__ctl2_Submit1" type="submit" value="按钮2" />

HtmlInputControl 的 Name 属性值:Repearter1$ctl002$Submit1;
HtmlInputControl 的 ID 属性值:Submit1;
HtmlInputControl 的 UniqueID 属性值:Repearter1$ctl002$Submit1;
HtmlInputControl 的 ClientID 属性值:Repearter1_ctl002_Submit1;
HtmlInputControl 的 NamingContainer的UniqueID 属性值:Repearter1$ctl002;
HtmlInputControl 的 NamingContainer的ParentID 属性值Repearter1:


因此,在编写客户端的程序时,不要用指定的ID值在客户端引用对象,一定要用该对象的ClientID属性传递到客户端的引用。
从上面的例子还可以看到,Name属性和UniqueID属性的命名规则是以“$”分割开来,而ClientID属性是以“_”分割开来,
Repeater1和ctl001等这个都是什么意思呢?如果在页面指令中把Trace=true,就可以看到ASP.NET在解析页面时的控件树
图,命名规则是以命名容器(NamingContainer)控件的ID和该控件ID的值链接而成(注意:不一定是父控件的ID)。服务器
控件的UniqueID会呈现客户端的name属性中,ClientID会呈现到客户点的id属性中。对于需要通过Request.Form的形式获
得客户端数据的情况,掌握这个属性非常重要。

posted @ 2008-06-18 16:49  我家的木子  阅读(318)  评论(0编辑  收藏  举报