天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

從外部的js文件中獲取ASPX頁面的控件ClientID

前言
當(dāng)使用MasterPage、UserControl等容器時,為了避免控件的重復(fù)命名,ASP.NET會自動將容器中的控件生成一個ClientID(Control Tree中的可生成,否則不會生成)。
例如:ContentPlaceHolder1中的Button1默認情況下會生成“ctl00_ContentPlaceHolder1_Button1”的ClientID。
我們在Render出來的mark up中看到的也是這些ClientID。所以,當(dāng)我們使用JavaScript對控件元素進行操作的時候,必須使用ClientID來對控件進行查找。
Inline情況下的解決方案
如果JavaScript代碼寫在.ASPx文件中時,也就是Inline Script時。在頁面生成的時候,我們能夠通過綁定機制將控件的ClientID綁定到頁面Mark up中,故可使用:
document.getElementById("<%=Me.txtTest.ClientID %>" )
來獲取一個控件的真實引用,當(dāng)然,F(xiàn)indControl等方法也可以寫在<%=...%>中用來綁定服務(wù)端數(shù)據(jù)到客戶端。
external JS情況下的解決方案
然而,部分情況下,為了解耦,我們常常把JavaScript單獨寫在.js文件中,再引用到ASPx文件中去。這種情況下,.js文件內(nèi)的代碼不能通過<%=...%>來進行服務(wù)端數(shù)據(jù)的綁定,所以上面的方法是不能用的。
此時簡單點的解決方案就是直接在JavaScript中寫控件的ClientID,但這樣增加了JS文件和ASPX的耦合度,非常不推薦使用。
我常用的方法有兩種,在此拋磚引玉:
案例:
Default5.ASPx是MasterPage.master 的內(nèi)容頁,本例中的主要文件。
JScript.js是一個外部的js文件,用來處理JavaScript操作。
Button1是Default5.ASPx中的一個<ASP:Button>,用來顯示效果。
Button2是Default5.ASPx中的一個<input type=button>,用來觸發(fā)JavaScript。
需求:點擊Button2,將Button1上的文本改成“from extended js”
方案一:使用內(nèi)聯(lián)JS訪問器
要想在外部JS中獲得ASPX動態(tài)生成的ClientID,可以通過在ASPX頁面中添加訪問器的方式來實現(xiàn),類似OO語言中的屬性:
我們在Default5.ASPx中添加如下代碼:
作用:①聲明getClientId訪問器,并注冊Button1的ClientID。②引用JScript.js文件
復(fù)制代碼 代碼如下:
<script type="text/Javascript">
function getClientId()
{
var paraId1 = '<%= Button1.ClientID %>';
return {Id1:paraId1};
}
</script>
<script type="text/Javascript" src="JScript.js"></script>
接下來,我們在JScript.js中,就可以這樣來實現(xiàn)需求:
function ChangeText()
{
var btn=document.getElementById(getClientId().Id1);
btn.value="from extended js";
}

getClientId().Id1 貌似很OO,而且還支持VS2008很蹩腳的JS智能提示,打上“.”之后就可以在提示中選擇Id1了
如果有多個控件需要注冊,只需將他們注冊到訪問器中即可,下面是一個完整的Demo代碼:
Default5.ASPx
復(fù)制代碼 代碼如下:
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" Title="Untitled Page" %>
<script runat="server">
</script>
<ASP:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
<script type="text/Javascript">
function getClientId()
{
var paraId1 = '<%= Button1.ClientID %>';//注冊控件1
var paraId2 = '<%= TextBox1.ClientID %>';//注冊控件2
return {Id1:paraId1,Id2:paraId2};//生成訪問器
}
</script>
<script type="text/Javascript" src="JScript.js"></script>//引用外部js
</ASP:Content>
<ASP:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<ASP:TextBox ID="TextBox1" runat="server"></ASP:TextBox>
<ASP:Button ID="Button1" runat="server" Text="Button" />
<input id="Button2" type="button" value="button" onclick="ChangeText();" />
</ASP:Content>
JScript.js
function ChangeText()
{
var btn=document.getElementById(getClientId().Id1);
btn.value="from extended js";
var btn=document.getElementById(getClientId().Id2);
btn.value="from extended js";
}

方案二:使用JS全局變量
還有一種方法也比較OO,就是使用JS全局變量,同樣,也需要在Default5.ASPx中添加一段JS代碼,作為全局變量,來提供ClientID:
復(fù)制代碼 代碼如下:
<script type="text/Javascript">
var globals = {};
globals.controlIdentities = {};
globals.controlIdentities.someControl1 = '<%= Button1.ClientID %>';
globals.controlIdentities.someControl2 = '<%= TextBox1.ClientID %>';
</script>
<script type="text/Javascript" src="JScript.js"></script>

接下來,我們在JScript.js中,就可以這樣來實現(xiàn)需求:
復(fù)制代碼 代碼如下:
function ChangeText()
{
var btn=document.getElementById(globals.controlIdentities.someControl1);
btn.value="from extended js";
}

globals.controlIdentities.someControl1,同樣,也支持VS2008很蹩腳的JS智能提示,打上“.”之后就可以在提示中選擇someControl1了
下面是一個完整的Demo代碼:
Default5.ASPx
復(fù)制代碼 代碼如下:
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" Title="Untitled Page" %>
<script runat="server">
</script>
<ASP:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
<script type="text/Javascript">
var globals = {};
globals.controlIdentities = {};
globals.controlIdentities.someControl1 = '<%= Button1.ClientID %>';
globals.controlIdentities.someControl2 = '<%= TextBox1.ClientID %>';
</script>
<script type="text/Javascript" src="JScript.js"></script>
</ASP:Content>
<ASP:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<ASP:TextBox ID="TextBox1" runat="server"></ASP:TextBox>
<ASP:Button ID="Button1" runat="server" Text="Button" />
<input id="Button2" type="button" value="button" onclick="ChangeText();" />
</ASP:Content>

JScript.js
復(fù)制代碼 代碼如下:
function ChangeText()
{
var btn=document.getElementById(globals.controlIdentities.someControl1);
btn.value="from extended js";
var txt=document.getElementById(globals.controlIdentities.someControl2);
btn.value="from extended js";
}

結(jié)束語:
在上面兩種方法中,也沒有真正的實現(xiàn)ASPx和js的完全解耦,所以,在js文件中,最好還是加上:
///<reference path="Default5.ASPx"/>

AspNet技術(shù)從外部的js文件中獲取ASPX頁面的控件ClientID,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 秋秋影视午夜福利高清 | 亚洲AV久久无码高潮喷水 | 午夜神器18以下不能进免费 | 99久久国产综合精品 | 久久久久国产精品嫩草影院 | 秋霞电影网午夜鲁丝片 | 亚洲色图激情小说 | 公粗挺进了我的密道在线播放贝壳 | 亚洲日本va中文字幕久久 | 我们日本在线观看免费动漫下载 | 亚洲国语在线视频手机在线 | 好吊妞国产欧美日韩视频 | 日本无码免费久久久精品 | 国产精品亚洲AV毛片一区二区三区 | yellow免费观看在线 | 日本无卡无吗在线 | 亚洲午夜一区二区电影院 | 久久艹伊人 | 毛片免费观看的视频在线 | 亚洲黄色免费在线观看 | 校花在公车上被内射好舒服 | 久久国产精品萌白酱免费 | 秋霞伦理机在线看片 | 国产看黄网站又黄又爽又色 | 妈妈的职业3完整版在线播放 | 国产午夜精品久久久久九九 | 成人在线视频在线观看 | 在线免费观看视频a | 牛牛在线(正)精品视频 | 男人脱女人衣服吃奶视频 | 亚洲精品动漫免费二区 | a久久99精品久久久久久蜜芽 | 儿子操妈妈视频 | 青柠在线电影高清免费观看 | 日本吃孕妇奶水免费观看 | 亚洲精品国偷拍自产在线观看蜜臀 | 亚洲AV永久无码精品老司机蜜桃 | 国产精品亚洲电影久久成人影院 | free高跟丝袜秘书hd | 东北女人一级毛片 | 暖暖日本手机免费完整版在线观看 |