![](/img/trans.png)
[英]ASP.NET: Problems with referencing a user control in another user control?
[英]Referencing the ASP.NET web control in javascript
我在我的用戶控件中創建了一個下拉列表,請參閱下面的源代碼,
<asp:DropDownList ID="ddlInd" runat="server" DataSourceID="indXmlDS" DataTextField="text" DataValueField="text"></asp:DropDownList>
在 Page_load 我已經這樣做了:
protected void Page_Load(object sender, EventArgs e)
{
ClientScriptManager cs = Page.ClientScript;
cs.RegisterStartupScript(this.GetType(), "myScript", "<script language='javascript' src='../Scripts/myJS.js'></script>");
ddlInd.Attributes["onchange"] = "showTextbox()";
}
那么,如果我想在我的外部 javascript 文件 myJS.js 中引用此控件,我應該使用什么代碼?
我曾嘗試使用document.getElementById("<%=ddlInd.ClientID %>")
但它會返回NULL 。
任何人都可以幫忙嗎? 謝謝
編輯:
不確定在此處附加該 myJS.js 文件是否有幫助
function showTextbox() {
var sid = <%=ddlInd.ClientID %>;
//alert(sid);
var s = document.getElementById('<%=ddlInd.ClientID %>'); // <-- problem here
alert(s);
if (s.options[s.selectedIndex].value == "Other") {
myDiv.style.display = "inline";
alert("display");
}
else {
myDiv.style.display = "none";
alert("none");
}
}
編輯2:
我找到了一種解決方法,即在用戶控制頁面中嵌入腳本而不是使用外部腳本文件。 謝謝大家的建議。 他們都非常有幫助。
修改后的js腳本如下,並且可以正常工作:
function showTextbox(objID) {
var s = document.getElementById(objID);
var div = document.getElementById("myDiv");
if (s.options[s.selectedIndex].value == "Other") {
div.style.display = "inline";
}
else {
div.style.display = "none";
}
}
嘗試使用ClientScriptManager.RegisterClientScriptInclude而不是 RegisterStartupScript。
在您的情況下,您似乎包含了一個外部 javascript 文件,而不是應該直接出現在頁面中的 javascript 代碼。
還可以嘗試將document.getElementById('<%=ddlInd.ClientID %>')
中的雙引號 " 更改為單引號 '
編輯哦,我看到您正在嘗試在 javascript 文件中執行 <%=ddlIndustry.ClientID %> 。 這不會在外部 js 文件中解釋! 您應該將 function 直接包含在頁面中(而不是作為外部文件),或者嘗試將 ColntrolId 作為參數傳遞給 js function
嘗試將控件的 ClientIdMode 設置為 Predictable:
<asp:DropDownList ID="ddlInd" ClientIDMode="Predictable" runat="server" DataSourceID="indXmlDS" DataTextField="text" DataValueField="text"></asp:DropDownList>
您還可以通過使用ClientIDMode="Static"
來使用 static ClientId,在這種情況下,ClientId 將等於控件的 id,因此您可以說:
document.getElementById("ddlInd");
您可以使用它來引用您的控件 to.js 文件
$('select#ddlInd').val(....)
如果下拉列表位於“ContentPlaceholder”內,您可以這樣做
$('select#ContentPlaceholderID_ddlInd').val(...)
將它放在 your.js 文件中
注意:當然包括 your.js 文件
如果你不能使用 .NET 4.0 並且卡在 3.5/2.0 上,我寫了一個名為 Awesome.ClientID 的小庫來解決這個問題。
我之前在這個答案中發布過: 如何讓這個 getElementsbyName 為 IE(和 FF)工作?
基本上,它將允許您將所有控件序列化為 JSON 數組,並且您可以將 JavaScript 更改為:
document.getElementById(controls.ddlInd);
該庫可以在這里找到: http://awesomeclientid.codeplex.com/
關於它的博客文章: http://www.philliphaydon.com/2010/12/i-love-clean-client-ids-special-with-net-2-0/
您可以使用 <%=Control.ClientID %> 當您在.aspx 頁面上有腳本時,如果您使用外部文件,那么您必須使用控件 ID <%=ddlInd.ClientID %> 將不起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.