5

我有 ASP.Net 页面,我在其中调用这样的 JavaScript 函数:

 Enter server name: <asp:TextBox ID="txt_name" runat="server"></asp:TextBox>
 <asp:Button ID="btn_view" runat="server" OnClick="View_btn_click" OnClientClick="return  AlertOnGo('View Configuration',document.getElementById('<%= txt_name.ClientID %>').value)" Text ="GO!" />

但是在单击 GO 按钮时,我收到以下错误:

JavaScript 运行时错误:无法获取未定义或空引用的属性“值”

查看按钮的渲染代码时:

<input type="submit" name="btn_view" value="GO!" onclick="return AlertOnGo('View Configuration',document.getElementById('<%= txt_name.ClientID %>').value);" id="btn_view" />

它没有放置适当的 ClientID。我尝试将测试框的 CLientIDMode 设置为静态,但没有帮助。

这个问题类似于这个未回答的问题

4

7 回答 7

10

这个问题有几个解决方案。

一种更简单的方法是将名称移动到 JavaScript 变量中,因为该问题仅在尝试评估 ASP.NET 控件的 OnClientClick 属性内的 txt_name.ClientID 时出现在控件中。

<script>
var txtName = '<%= txt_name.ClientID %>';
</script>

Enter server name: <asp:TextBox ID="txt_name" runat="server"></asp:TextBox>
 <asp:Button ID="btn_view" runat="server" OnClick="View_btn_click" 
OnClientClick="return  AlertOnGo('View Configuration', 
document.getElementById(txtName).value)" Text ="GO!" />
于 2013-04-22T12:48:02.400 回答
5

您可以使用ClientIDMode="Static"asp:textbox 标记内的属性

像这样

<asp:TextBox ClientIDMode="Static" ID="txt_name" runat="server"></asp:TextBox>
<asp:Button ID="btn_view" runat="server" OnClick="View_btn_click" 
 OnClientClick="return  AlertOnGo('View Configuration', 
 document.getElementById(txtName).value)" Text ="GO!" />

这样,文本框的客户端 ID 将与“ID”相同,您可以使用 document.getElementById('txt_name').value

它对我有用

于 2014-09-25T06:09:27.913 回答
0

-- 编辑后的答案 -- aspx

<asp:Button ID="btn_view" runat="server" OnClick="View_btn_click" OnClientClick="javascript:return AlertOnGo('View Configuration');" 文本="开始!" />

脚本

功能 AlertOnGo(模式)
{
  var btnId = '<%= txt_name.ClientID %>';
  var value=document.getElementById(btnId).value;

//你的代码

返回假;
}
于 2013-04-22T12:44:49.447 回答
0

您在 asp.net web 控件的属性中使用 <%= %> - 我不希望它起作用,因为整个控件将被 html 替换。

我会将您的 javascript 移出脚本块并将事件处理程序附加到代码中,而不是将其全部内联。

Enter server name: <asp:TextBox ID="txt_name" runat="server"></asp:TextBox>
 <asp:Button ID="btn_view" runat="server" OnClick="View_btn_click" Text ="GO!" />
<script>
document.getElementById('<%= btn_view.ClientID %>').attachEvent('click', function() {
     return AlertOnGo('View Configuration',
                        document.getElementById('<%= txt_name.ClientID %>').value);
});
</script>
于 2013-04-22T12:45:04.543 回答
0

我更喜欢使用 String.Concat。您可以使用 \u0027 代替撇号。

OnClientClick='<%#String.Concat("document.getElementById(\u0027", AddToCartBtn.ClientID.ToString(), "\u0027).value = \u0027Adding...\u0027;")%>'
于 2016-09-19T00:29:30.497 回答
0

另一个解决方案是你可以去浏览器做昆虫元素读取文本框的动态 ID 并在 javascript 中设置它,如:

var ddlFunction = document.getElementById('ctl00_SPWebPartManager1_g_ecede3f6_2b87_405a_af1b_70401bb8d4c7_ddlFunction'); 

html:

<asp:DropDownList ID="ddlFunction" runat="server" CssClass="dropDownClass">
    <asp:ListItem Selected="True">Select One</asp:ListItem>
    <asp:ListItem>Sample 1</asp:ListItem>
    <asp:ListItem>Sample 2</asp:ListItem>
</asp:DropDownList>
于 2016-10-24T14:29:36.403 回答
0

您可以创建一个 css 类并使用它来代替客户端 ID(使用 jQuery $('.txt_name').text()):

输入服务器名称:

 <asp:TextBox ID="txt_name" CssClass="txt_name" runat="server"></asp:TextBox>
于 2018-05-07T21:08:22.087 回答