ID,ClientID和UniqueID - .net语言 -

ID,ClientID和UniqueID

时间:2010-01-27 00:02:11   来源:   评论:加载中...   点击:加载中...
在ASP.NET 的服务器端控件中有三种关于 ID 的属性,即 ID, ClientID 和 UniqueID。ID 表示控件的服务器端编程的标识符,我们写"服...

关于焦点在也可以代码中通过 this.SetFocus()来设置了,看得出来ASP.NET2.0是设计是多么的细致。

Header
在代码中可能通过
this.Header.Metadata.Add("taye", "value");
this.Header.Title = "value";
this.Header.LinkedStyleSheets.Add("style.css");
来控制Title,Meta,Style等[好象LinkedStyleSheets只能是text/css???]
this.Header.StyleSheet.RegisterStyle()
方法将一个style内嵌到网页中去.

这样页面几乎所以部分都可以得到控制了

有些人也许会想那<html>和<body>呢
我们先来运行一下面这个代码.

   private void Page_Load(object sender, EventArgs e)
    {
        foreach (Control ctl in Page.Controls)
        {
            Response.Write(ctl.ToString() + "<BR/>");

            LiteralControl lc = ctl as LiteralControl;

            if (lc != null)
            {
                Response.Write(lc.Text);
            }
        }

    }


你将会看到一个正常页的有如下五个控件
System.Web.UI.LiteralControl
System.Web.UI.HtmlControls.HtmlHead
System.Web.UI.LiteralControl
System.Web.UI.HtmlControls.HtmlForm
System.Web.UI.LiteralControl

而三个LiteralControl的控件的内容分别为

System.Web.UI.LiteralControl
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

System.Web.UI.LiteralControl
<body>
    
System.Web.UI.LiteralControl
</body>
</html>

所以如果你要对body或<!DOCTYPE..>或<html>进行控制那你就找到这相应的控件以后再进行相应的修改吧。只要对

LiteralControl.Text进行修改就可以.


 

--------------------------------------------------------------------------

 

从外部的js文件中获取ASPX页面的控件ClientID

 

 

前言

当使用MasterPage、UserControl等容器时,为了避免控件的重复命名,asp.net会自动将容器中的控件生成一个ClientID(Control Tree中的可生成,否则不会生成)。

例如:ContentPlaceHolder1中的Button1默认情况下会生“ctl00_ContentPlaceHolder1_Button1”的ClientID。我们在Render出来的mark up中看到的也是这些ClientID。所以,当我们使用JavaScript对控件元素进行操作的时候,必须使用ClientID来对控件进行查找。

 

Inline情况下的解决方案

如果JavaScript代码写在.aspx文件中时,也就是Inline Script时。在页面生成的时候,我们能够通过绑定机制将控件的ClientID绑定到页面Mark up中,故可使用:

-->document.getElementById("<%=Me.txtTest.ClientID %>" )
来获取一个控件的真实引用,当然,FindControl等方法也可以写在<%=...%>中用来绑定服务端数据到客户端。

 

external JS情况下的解决方案

然而,部分情况下,为了解耦,我们常常把JavaScript单独写在.js文件中,再引用到aspx文件中去。这种情况下,.js文件内的代码不能通过<%=...%>来进行服务端数据的绑定,所以上面的方法是不能用的。

此时简单点的解决方案就是直接在JavaScript中写控件的ClientID,但这样增加了JS文件和ASPX的耦合度,非常不推荐使用。

我常用的方法有两种,在此抛砖引玉:

 

案例:

Default5.aspx是MasterPage.master 的内容页,本例中的主要文件。

JScript.js是一个外部的js文件,用来处理JavaScript操作。

Button1是Default5.aspx中的一个<ASP:Button>,用来显示效果。

Button2是Default5.aspx中的一个<input type=button>,用来触发JavaScript。

需求:点击Button2,将Button1上的文本改成“from extended js”

 



相关热词搜索:

 
上一篇:DataGrid的自动编号问题
下一篇:C#中COOKIES的实现存取
收藏 将此文推荐给朋友
分享到: