Manchmal muß man auf die Eingabe in einer TextBox bereits bei der Eingabe reagieren. Für dieses Zweck stellt das .NET-Framework den Eventhandler .TextChanged zur Verfügung. Allerdings funktioniert der Eventhandler nicht "as is". Für die zu überwachende TextBox muß zusätzlich AutoPostBack aktiviert werden. Außerdem muß die TextBox nach der Eingabe verlassen werden (z.B. durch Drücken der TAB-Taste). Eine zeitnahe Reaktion auf die Eingabe ist also nicht möglich.
Ein Beispiel hierfür finden Sie hier: TextChanged Beispiel mit .NET-Bordmitteln
Der SourceCode sieht wie folgt aus:
dotnet.aspx:
|
|
|
| 1: |
<%@ Page language="c#" Codebehind="dotnet.aspx.cs" AutoEventWireup="false" Inherits="BlogSamples.onTextChange.dotnet" %> |
| 2: |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > |
| 3: |
<HTML> |
| 4: |
<HEAD> |
| 5: |
<meta name="vs_snapToGrid" content="True"> |
| 6: |
<title>default</title> |
| 7: |
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1"> |
| 8: |
<meta name="CODE_LANGUAGE" Content="C#"> |
| 9: |
<meta name="vs_defaultClientScript" content="JavaScript"> |
| 10: |
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> |
| 11: |
</HEAD> |
| 12: |
<body MS_POSITIONING="GridLayout"> |
| 13: |
<form id="Form1" method="post" runat="server"> |
| 14: |
<asp:TextBox id="TextBox1" |
| 15: |
style="Z-INDEX: 101; LEFT: 32px; POSITION: absolute; TOP: 88px" |
| 16: |
runat="server" |
| 17: |
AutoPostBack="True"> |
| 18: |
</asp:TextBox> |
| 19: |
<asp:Label id="Label1" |
| 20: |
style="Z-INDEX: 102; LEFT: 32px; POSITION: absolute; TOP: 64px" |
| 21: |
runat="server" |
| 22: |
Width="512px"> |
| 23: |
Bitte geben Sie einen Text ein und drücken Sie nach Ihrer Eingabe die TAB-Taste |
| 24: |
</asp:Label> |
| 25: |
<asp:Label id="Label2" |
| 26: |
style="Z-INDEX: 103; LEFT: 32px; POSITION: absolute; TOP: 120px" |
| 27: |
runat="server" |
| 28: |
Width="146px"> |
| 29: |
Ihre Eingabe bisher: |
| 30: |
</asp:Label> |
| 31: |
<asp:Label id="Label3" |
| 32: |
style="Z-INDEX: 104; LEFT: 32px; POSITION: absolute; TOP: 144px" |
| 33: |
runat="server" |
| 34: |
Width="197px" |
| 35: |
ForeColor="Blue"> |
| 36: |
</asp:Label> |
| 37: |
<asp:Label id="Label4" |
| 38: |
style="Z-INDEX: 105; LEFT: 32px; POSITION: absolute; TOP: 24px" |
| 39: |
runat="server" |
| 40: |
Width="344px" |
| 41: |
Font-Bold="True"> |
| 42: |
TextChanged Beispiel mit .NET-Bordmitteln |
| 43: |
</asp:Label> |
| 44: |
<asp:Label id="Label5" |
| 45: |
style="Z-INDEX: 106; LEFT: 32px; POSITION: absolute; TOP: 184px" |
| 46: |
runat="server">PostBack ausgelöst: |
| 47: |
</asp:Label> |
| 48: |
<asp:Label id="Label6" |
| 49: |
style="Z-INDEX: 107; LEFT: 168px; POSITION: absolute; TOP: 184px" |
| 50: |
runat="server" |
| 51: |
Width="56px" |
| 52: |
Font-Bold="True" |
| 53: |
ForeColor="DarkRed"> |
| 54: |
</asp:Label> |
| 55: |
</form> |
| 56: |
</body> |
| 57: |
</HTML>
|
dotnet.aspx.cs:
|
|
|
| 1: |
public class dotnet : System.Web.UI.Page |
| 2: |
{ |
| 3: |
protected System.Web.UI.WebControls.TextBox TextBox1; |
| 4: |
protected System.Web.UI.WebControls.Label Label1; |
| 5: |
protected System.Web.UI.WebControls.Label Label2; |
| 6: |
protected System.Web.UI.WebControls.Label Label4; |
| 7: |
protected System.Web.UI.WebControls.Label Label5; |
| 8: |
protected System.Web.UI.WebControls.Label Label6; |
| 9: |
protected System.Web.UI.WebControls.Label Label3; |
| 10: |
|
| 11: |
private void Page_Load(object sender, System.EventArgs e) |
| 12: |
{ |
| 13: |
if(!IsPostBack) |
| 14: |
{ |
| 15: |
Label6.Text="nein"; |
| 16: |
} |
| 17: |
else |
| 18: |
{ |
| 19: |
Label6.Text="ja"; |
| 20: |
} |
| 21: |
} |
| 22: |
|
| 23: |
private void TextBox1_TextChanged(object sender, System.EventArgs e) |
| 24: |
{ |
| 25: |
Label3.Text=TextBox1.Text; |
| 26: |
} |
| 27: |
} |
Abhilfe schafft hier die Verwendung von Javascript. Dieses lässt sich leicht mittels WebControls.Attributes.Add(key, valuestring) injizieren. Damit kann bei jedem erfassten oder gelöschten Zeichen in der TextBox ohne PostBack sofort auf die Eingabe reagiert wrden.
Das Beispiel findet sich hier: TextChanged Beispiel mit JavaScript
Der Code der aspx-Datei ist bis auf die Aktivierung von AutoPostBack identisch mit dem vorangegangenen Beispiel, der Code der javascript.cs sieht wie folgt aus:
|
|
|
| 1: |
public class _default : System.Web.UI.Page |
| 2: |
{ |
| 3: |
protected System.Web.UI.WebControls.TextBox TextBox1; |
| 4: |
protected System.Web.UI.WebControls.Label Label1; |
| 5: |
protected System.Web.UI.WebControls.Label Label2; |
| 6: |
protected System.Web.UI.WebControls.Label Label4; |
| 7: |
protected System.Web.UI.WebControls.Label Label5; |
| 8: |
protected System.Web.UI.WebControls.Label Label6; |
| 9: |
protected System.Web.UI.WebControls.Label Label3; |
| 10: |
|
| 11: |
private void Page_Load(object sender, System.EventArgs e) |
| 12: |
{ |
| 13: |
TextBox1.Attributes.Add("onKeydown","Label3.innerText=TextBox1.value"); |
| 14: |
if(!IsPostBack) |
| 15: |
{ |
| 16: |
Label6.Text="nein"; |
| 17: |
} |
| 18: |
else |
| 19: |
{ |
| 20: |
Label6.Text="ja"; |
| 21: |
} |
| 22: |
} |
| 23: |
} |