2014-09-26 51 views
0

主頁:如何從主頁的javascript函數訪問用戶控制頁面dropdownlist控件ID?

<%@ Register TagPrefix="A" TagName="AA" Src="~/UserControls/ab.ascx" %> 

<A:AA id="a1" runtat="server" /> 
<asp:Button ID="btn" Visible="true" runat="Server" OnClick="Btn_Click" OnClientClick="javascript:PreLoad();" /> 

<script type="text/javascript"> 
function PreLoad() { 
var empty = '<%= (a1.FindControl("ddl")).ClientID %>'; 
// the above line giving error as 'ddl is inaccessible due to its protection level' 
} 
</script> 

在用戶控件頁:

<%@ ControlLanguage="C#" AutoEventWireup="true" CodeBehind="ab.ascx.cs" inherits="ab.ascx.designer.cs" %> 
<asp:DropDownList ID="ddl" runat="server"> </asp:DropDownList> 

在ab.ascx.designer.cs

protected global::System.Web.UI.WebControls.DropDownList ddl; 

有人請解釋乾淨簡單的訪問方式'PreLoad()'中的'ddl'' javascript函數?

回答

1

您的標籤更改爲:

<asp:DropDownList ID="ddl" runat="server" ClientIDMode="static"> </asp:DropDownList> 

這意味着該控件使用指定的確切ID呈現。 然後改變你的JavaScript使用控制的精確ID和訪問它:

document.getElementById("ddl"); 

或者使用jQuery:

$("#ddl"); 

理想情況下,你應該也移到這段JavaScript代碼到外部文件。

+0

謝謝,它真的很有用,你想介紹一下'ClientIDMode =「static」是如何工作的嗎?這個「靜態」有沒有其他方面的影響? – kneethan 2014-09-26 15:50:40

+0

Webforms爲其添加到頁面的所有控件提供唯一的客戶端ID。這是放入原始html中的值。你可以通過調用.ClientID來獲得它,就像你在代碼中一樣。使用ClientIDMode =「static」意味着客戶端ID設置爲您指定的任何值,而不是讓webforms生成它。好處是,你可以從你的javascript的任何地方訪問它,就像上面一樣。唯一的缺點是它爲開發人員犯錯誤提供了空間。如果您不小心,可以使用相同的ID添加2個控件。 – Keith 2014-09-26 15:59:34

+0

感謝您的澄清,您是否可以解釋爲什麼我的ClientID方法不起作用? – kneethan 2014-09-26 18:06:34

相關問題