【问题标题】:Error in resolving server side tag解析服务器端标签时出错
【发布时间】:2009-12-22 17:08:56
【问题描述】:

无效的表达式术语'

<asp:TextBox ID="txtPassword" runat="server" 
            Width="180px" TextMode="Password" 
            OnTextChanged="CheckPasswordStrength(<%= txtPassword.ClientID.ToString() %>,<%= lblMessage.ClientID.ToString() %>)"/>

如果我像下面这样编写此代码,则会发生错误发生未处理的异常。服务器标签不能包含 结构

  <asp:TextBox ID="txtPassword" runat="server" 
                Width="180px" TextMode="Password" 
                OnTextChanged="CheckPasswordStrength("<%= txtPassword.ClientID.ToString() %>","<%= lblMessage.ClientID.ToString() %>")"/>

当我在 .cs 文件中使用此代码时,一切正常。

 protected void Page_Load(object sender, EventArgs e)
    {
        txtPassword.Attributes.Add("onKeyUp", "PasswordCheck("+txtPassword.ClientID.ToString()+")");
        txtPrimaryEmail.Attributes.Add("onKeyUp", "EmailChecker("+txtPrimaryEmail.ClientID.ToString()+")");
    }

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    这会发生一些事情。您不能在服务器端事件中包含参数,也不能在服务器控件中使用

    你的意思是触发一个 JavaScript 事件吗?

    如果您要触发 JavaScript 事件,请执行以下三件事之一:

    1) 使用数据绑定表达式 () - 这要求在您的控件上调用生命周期内的某处 DataBind()。

    2) 在代码隐藏中分配事件,使用 Control.Attributes.Add("javascriptevent", "DoStuff(x, y)")

    3) 您可以在客户端脚本中使用 ,例如

    function MyJavaScriptEventHandler()
    {
       var textbox = document.getElementById('<%= MyASPTextBox.ClientID %>');
       alert(textbox.value);
    }
    

    【讨论】:

    • 感谢帮助,1 个问题。如果我使用外部 js 文件,那么这个方法是否有效
    • 第三种方法不适用于外部文件。第一个和第二个会。我建议坚持你现在的做法,将其分配给代码隐藏中的属性集合。
    • 如果是在外部的js文件里就不行了。
    【解决方案2】:

    我认为您不能在服务器事件中包含参数。您将需要从 Code-Behind 中引用这些控件。

    【讨论】:

      【解决方案3】:

      是的。服务器控件不能包含&lt;%(对这些标签的评估发生在服务器控件之后 - 因此这些标签被视为服务器控件的一部分并且解析失败)。

      您可能希望在代码隐藏中添加 ontextchanged 属性。你也可以使用 JavaScript。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-21
        • 2014-04-26
        • 2012-08-16
        相关资源
        最近更新 更多