.TextChanged bei der ASP.NET-Textbox

Written on September 16, 2003

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:

4:

5:

6:

default

7:

8:

9:

10:

11:

12:

13:

14:

18:

19:

23: Bitte geben Sie einen Text ein und drücken Sie nach Ihrer Eingabe die TAB-Taste

24:

25:

29: Ihre Eingabe bisher:

30:

31:

36:

37:

42: TextChanged Beispiel mit .NET-Bordmitteln

43:

44:

<asp:Label id="Label5"

45: style="Z-INDEX: 106; LEFT: 32px; POSITION: absolute; TOP: 184px"

46: runat="server">PostBack ausgelöst:

47:

48:

54:

55:

56:

57:

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: }