在javascript中引用ASP.NET web控件
本文关键字:NET web 控件 ASP 引用 javascript | 更新日期: 2023-09-27 18:00:40
我在用户控件中创建了一个下拉列表,请参阅下面的源代码,
<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文件中的ddlIndustri.ClientID%>。这不会在外部js文件中解释!您应该将函数直接包含在页面中(而不是作为外部文件),或者尝试将ColntrolId作为参数传递给js函数
尝试将控件的ClientIdMode设置为Predictable:
<asp:DropDownList ID="ddlInd" ClientIDMode="Predictable" runat="server" DataSourceID="indXmlDS" DataTextField="text" DataValueField="text"></asp:DropDownList>
您也可以通过使用ClientIDMode="Static"
使用静态ClientId,在这种情况下,ClientId将等于控件的id,因此您可以说:
document.getElementById("ddlInd");
您可以使用它将控件引用到.js文件
$('选择#ddlInd').val(….)
如果下拉列表位于"ContentPlaceholder"中,则可以执行此
$('选择#ContentPlaceholderID_ddlInd').val(…)
将其放在.js文件中
注意:当然包括你的.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-especially-with-net-2-0/
您可以使用<%=Control.ClientID%>当你在.aspx页面上有脚本时,如果你使用外部文件,那么你必须使用控件id<%=ddlInd.ClientID%>将不起作用。