在javascript中引用ASP.NET web控件

Referencing the ASP.NET web control in javascript

本文关键字:NET web 控件 ASP 引用 javascript      更新时间:2023-09-26

我在用户控件中创建了一个下拉列表,请参阅下面的源代码,

<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%>将不起作用。