![](/img/trans.png)
[英]How can I access the controls on my default aspx page from my class library, within solution
[英]How can i access server controls from my external JavaScript file?
當我使用此"#<%= txtNumberOfDrugsInKit.ClientID %>"
,我可以從我的JQuery腳本訪問服務器控件; 但是當我把它放在一個外部腳本文件中時,它不起作用。
如何從外部JavaScript文件訪問ASP文本框? 我不能相信這是行不通的。
我要做的是將一個腳本放在我的主頁上(而不是在外部文件中),該腳本僅包含這樣的對象定義:
var Controls = {
'Name':<%="'" + txtNumberOfDrugsInKit.ClientID%>',
'OtherName':<%="'" + otherControl.ClientID%>'
};
這里的竅門是必須將其放在標題中,否則不能從外部文件中使用它,因此必須將runat="server"
添加到head元素聲明中。 這也解釋了為什么我使用對象而不是簡單的變量名。 它將其他地方發生命名沖突的機會降到最低(我只需要擔心“控件”名稱)。
然后,我可以在外部腳本中使用該Controls對象,如下所示:
var OtherElement = document.getElementById(Controls.OtherName);
要么
var jQueryObj = $('#' + Controls.OtherName);
在這里查看另一個示例:
我可以指望ctl00_PagePlaceHolder_myId保持不變嗎?
我認為文章會幫助您。 http://lanitdev.wordpress.com/2009/06/08/extending-jquery-to-select-asp-controls/ +
我已經使用了此解決方案,並且無需添加額外的標記即可很好地選擇服務器控件。
我假設#<%= txtNumberOfDrugsInKit.ClientID %>
在服務器端進行了評估,因此當然在外部js中不起作用,因為這些是靜態提供的,而不是在服務器端進行處理的。
我認為您不完全了解服務器上運行的代碼和客戶端上運行的代碼。 將數據傳遞到外部腳本中的一種方法是將其放入隱藏的輸入或隱藏的div中,然后從外部腳本中讀取該DOM元素。
“#<%= txtNumberOfDrugsInKit.ClientID%>”很可能不在外部JS文件中執行,因為它不是ASP.NET頁的一部分。您必須“硬編碼” ID。
但是,如果ASP.NET生成的“怪異” ID出現問題,則可以將ClientID放入隱藏字段中,然后從外部JS文件中讀取該字段。
我過去為解決此問題所做的就是改用CSS名稱。 在txtNumberOfDrugsInKit控件上,您可以執行以下操作...
<asp:TextBox ID="txtNumberOfDrugsInKit" CssClass="txtNumberOfDrugsInKit" ... />
然后在您的jQuery中,您可以通過類名來引用它,而不是將它引用為$("#<%= txtNumberOfDrugsInKit.ClientID %>")
。 在這種情況下,您只需要執行$(".txtNumberOfDrugsInKit")
。 只要您在頁面上保持這些選擇器的唯一性-只需選擇一個控件就完全沒有問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.