ASP.NET中用服务器标签在TextBox onblur传HiddenField值报错
问题分析与解决方案
错误原因在于服务器标签的格式和内联事件的引号嵌套处理不当,同时数据绑定表达式的使用场景也需要匹配。以下是两种可行的修复方案:
方案1:直接输出服务器端值(非数据绑定场景)
如果不需要数据绑定逻辑,使用<%= %>直接输出HiddenField的值即可,这是最简洁的方式:
<asp:HiddenField ID="hdnMaxLen" runat="server" Value="10" /> <asp:TextBox ID="txtTargetForBelow6" runat="server" MaxLength="10" onkeyup="return FnAlert(this, <%= hdnMaxLen.Value %>);" CssClass="form-control" AutoCompleteType="None" autocomplete="off"></asp:TextBox>
- 说明:
<%= %>会直接在页面渲染时输出服务器端控件的Value值,因为这里是数字类型,无需额外添加引号;如果是字符串参数,需要改为'<%%= hdnMaxLen.Value %>'用单引号包裹。
方案2:使用数据绑定表达式(绑定场景)
如果你的控件处于数据绑定容器(如GridView、Repeater)内,必须使用<%# %>,则需要修正引号嵌套并确保执行数据绑定:
前端代码
<asp:HiddenField ID="hdnMaxLen" runat="server" Value="10" /> <asp:TextBox ID="txtTargetForBelow6" runat="server" MaxLength="10" onkeyup='<%# "return FnAlert(this, " + hdnMaxLen.Value + ");" %>' CssClass="form-control" AutoCompleteType="None" autocomplete="off"></asp:TextBox>
后台代码(确保执行数据绑定)
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { // 可以绑定单个控件或整个页面 txtTargetForBelow6.DataBind(); // Page.DataBind(); } }
- 说明:将
onkeyup的属性值用单引号包裹,内部通过<%# %>拼接完整的JavaScript代码字符串,避免引号冲突,同时必须调用DataBind()触发数据绑定表达式的解析。
内容的提问来源于stack exchange,提问作者Hisanth
相关产品推荐
相关产品推荐

