同桌上课用手指进去了好爽_欧美丰满熟妇xxⅹⅹ性大i_成人av天天日天天拍拍_猛男gay帅男gay男男同志_欧美va天堂在线观看_人妻无码av中文系列三里桃花_亚欧免费无码在线观看_久久久精品国产亚洲av水_日韩在线免费看污污污_2021无码专区人妻系列日韩

首頁 優(yōu)化推廣 從外部的js文件中獲取ASPX頁面的控件ClientID(get control reference from external javascript)

從外部的js文件中獲取ASPX頁面的控件ClientID(get control reference from external javascript)

來源: | 時(shí)間:2013/12/20 10:41:40 |

當(dāng)使用MasterPage、UserControl等容器時(shí),為了避免控件的重復(fù)命名,asp.net會自動(dòng)將容器中的控件生成一個(gè)ClientID(Control Tree中的可生成,否則不會生成)。

例如:ContentPlaceHolder1中的Button1默認(rèn)情況下會生成“ctl00_ContentPlaceHolder1_Button1”的ClientID。

我們在Render出來的mark up中看到的也是這些ClientID。所以,當(dāng)我們使用JavaScript對控件元素進(jìn)行操作的時(shí)候,必須使用ClientID來對控件進(jìn)行查找。

 

Inline情況下的解決方案

如果JavaScript代碼寫在.aspx文件中時(shí),也就是Inline Script時(shí)。在頁面生成的時(shí)候,我們能夠通過綁定機(jī)制將控件的ClientID綁定到頁面Mark up中,故可使用:

document.getElementById("<%=Me.txtTest.ClientID %>" )

來獲取一個(gè)控件的真實(shí)引用,當(dāng)然,F(xiàn)indControl等方法也可以寫在<%=...%>中用來綁定服務(wù)端數(shù)據(jù)到客戶端。

 

external JS情況下的解決方案

然而,部分情況下,為了解耦,我們常常把JavaScript單獨(dú)寫在.js文件中,再引用到aspx文件中去。這種情況下,.js文件內(nèi)的代碼不能通過<%=...%>來進(jìn)行服務(wù)端數(shù)據(jù)的綁定,所以上面的方法是不能用的。

此時(shí)簡單點(diǎn)的解決方案就是直接在JavaScript中寫控件的ClientID,但這樣增加了JS文件和ASPX的耦合度,非常不推薦使用。

我常用的方法有兩種,在此拋磚引玉:

 

案例:

Default5.aspx是MasterPage.master 的內(nèi)容頁,本例中的主要文件。

JScript.js是一個(gè)外部的js文件,用來處理JavaScript操作。

Button1是Default5.aspx中的一個(gè)<ASP:Button>,用來顯示效果。

Button2是Default5.aspx中的一個(gè)<input type=button>,用來觸發(fā)JavaScript。

需求:點(diǎn)擊Button2,將Button1上的文本改成“from extended js”

 

方案一:使用內(nèi)聯(lián)JS訪問器

要想在外部JS中獲得ASPX動(dòng)態(tài)生成的ClientID,可以通過在ASPX頁面中添加訪問器的方式來實(shí)現(xiàn),類似OO語言中的屬性:

我們在Default5.aspx中添加如下代碼:

作用:①聲明getClientId訪問器,并注冊Button1的ClientID。②引用JScript.js文件

 
<script type="text/javascript">
    function getClientId()
     {
     
var paraId1 = '<%= Button1.ClientID %>';
     
return {Id1:paraId1};
     }

</script>
<script type="text/javascript" src="JScript.js"></script>
 

 

接下來,我們在JScript.js中,就可以這樣來實(shí)現(xiàn)需求:

function ChangeText()
{
    
var btn=document.getElementById(getClientId().Id1);
     btn.value
="from extended js";
}

 

getClientId().Id1 貌似很OO,而且還支持VS2008很蹩腳的JS智能提示,打上“.”之后就可以在提示中選擇Id1了

如果有多個(gè)控件需要注冊,只需將他們注冊到訪問器中即可,下面是一個(gè)完整的Demo代碼:

 

Default5.aspx
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" Title="Untitled Page" %>

<script runat="server">

</script>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
<
TAG:高端網(wǎng)站建設(shè)高端網(wǎng)站設(shè)計(jì)網(wǎng)站制作網(wǎng)站建設(shè)

服務(wù)熱線

153 8323 9821

功能和特性

價(jià)格和優(yōu)惠

網(wǎng)站和維護(hù)

推廣和優(yōu)化

微信服務(wù)號