2009-12-22 114 views
5

無效表達術語「<」錯誤解析服務器側標籤

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

如果我喜歡以下則錯誤寫入此代碼未處理的異常已發生。服務器標記不能包含<%%>當我米使用此代碼的.cs文件,然後每一件事工作正常構造

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

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

回答

4

有一些事情正在進行中..您不能在服務器端事件中包含參數,並且您不能在服務器控件中使用<%=。

您是否想要激發JavaScript事件?

如果你意思是火一個JavaScript事件,做的三兩件事之一:

1)使用數據綁定表達式(<%#Control.ClientID%>) - 這需要在某處內生命循環DataBind()正在您的控件上調用。

2)在分配事件代碼隱藏,使用Control.Attributes.Add( 「javascriptevent」, 「DoStuff(X,Y)」)

3)可以使用<%=%>在你的客戶端腳本,例如

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

是的,我正在調用一個javascript函數。 – 2009-12-22 17:17:48

+0

thx求助,1個問題。如果我使用外部js文件,那麼這個方法是否工作 – 2009-12-22 17:26:38

+0

第三種方法不適用於外部文件。第一和第二會。我建議堅持現在的做法,將其分配到代碼隱藏的屬性集合中。 – zincorp 2009-12-22 17:27:40

0

我不認爲你可以在服務器事件中包含參數。您需要從代碼隱藏中引用這些控件。

0

是的。服務器控件不能包含<%(這些標記的評估發生在服務器控件之後 - 所以這些標記被認爲是服務器控件的一部分,並且無法解析)。

您可能希望在代碼隱藏中添加ontextchanged屬性。你也可以使用JavaScript。