在javascript中引用ASP.NET web控件
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文件中的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%>将不起作用。
- 同一文本框中的验证程序CPF e CNPJ(ASP.NET web应用程序)
- 如何使用默认的网络摄像头拍摄照片并将其保存在我的c#.net web应用程序中
- WebMethod在ASP.Net Web角色(Web窗体)中不起作用
- 如何使用phonegap在android中调用asp.net Web服务
- asp.net web表单客户端验证始终回发
- Testing .NET Web API from JavaScript
- 是否可以将 ASP.NET Web 应用程序上载到 VMware 上的虚拟 2008 服务器上
- 用于.NET Web开发的MetaWidget
- ASP中的动态图像.NET Web应用程序
- 是否可以在没有视图状态和回发的情况下使用asp.net web表单
- 如何通过AngularJS$http从ASP.Net Web API 2获取访问令牌
- ASP.net web服务使用javascript发送命令
- 在ASP.Net web窗体/MVC中动态加载和添加字段
- 在ASP.NET Web API 2项目中设置Angular路由
- 如何将字符串数组从javascript传递到asp.net Web服务
- ASP.NET Web API 控制器更新行
- ASP.NET Web API 2 - 如何开机自检
- 如何将服务器端类型传递给 asp.net Web 表单以供 JavaScript 使用
- 如何在 ASP.NET Web 表单中填补服务器端和客户端之间的空白
- asp.net Web API 405 方法不允许、发布、自定义操作