Statistika testů
K této kapitole
Zodpovězených: 0
Správně: 0
Špatně: 0
Úspěšnost: 0%
Nezodpovězených: 0

Pro testování a jeho statistické vyhodnocení je nutné se přihlásit.


Celkem
Zodpovězených: 0
Správně: 0
Špatně: 0
Úspěšnost: 0%
Nezodpovězených: 0

Ovládací prvek TextBox
RNDr. Dušan Kovář, Ph.D.
30. října 2006
Počet návštěv: 2403

Ovládací prvek TextBox se umisťuje na stránku následovně:

<asp:TextBox ID="Nazev" Runat="server" />

Třída System.Web.UI.WebControls.TextBox tohoto prvku má mimo jiné následující významné vlastnosti:

Typ vlastnosti Název vlastnosti Přístup k vlastnosti Význam vlastnosti
bool AutoPostBack get/set Zda se má stránka automaticky odeslat na server,
jakmile uživatel modifikuje text v poli.
Stránka se však odešle až po ztrátě zaměření.
int Columns get/set Šířka textového pole v počtu znaků.
int MaxLength get/set Maximální počet znaků v textovém poli.
bool ReadOnly get/set Zda je jen pro čtení a nelze tedy
modifikovat text v textovém poli.
int Rows get/set Počet řádků ve víceřádkovém textovém poli.
string Text get/set Text v textovém poli.
TextBoxMode TextMode get/set Režim textového pole. Může být SingleLine,
což je výchozí hodnota, MultiLine,
nebo Password.
bool Wrap get/set Zda se má zalamovat text.

Kromě těchto vlastností dědí třída TextBox celou řadu vlastností z tříd System.Web.UI.Control a System.Web.UI.WebControls.WebControl. Zastavme se u těch nejpouživanějších (některé další zmíníme u vlastních ovládacích prvků):

Typ vlastnosti Název vlastnosti Přístup k vlastnosti Význam vlastnosti
string CssClass get/set Třída v CSS pro daný prvek.
bool Enabled get/set Zda je prvek přístupný.
bool EnableViewState get/set Zda se bude uchovávat obsah objektu mezi jednotlivými
odesláními na server.
Unit Height get/set Výška prvku.
CssStyleCollection Style get Kolekce stylů pro daný prvek.
Unit Width get/set Výška prvku.
bool Visible get/set Zda je prvek viditelný.

Ukažme si, jak se přeloží do HTML textové pole s určitými vlastnostmi:

V ASP.NET:
<asp:TextBox ID="Jmeno" Runat="server" Width="200px" />
Po přeložení do HTML:
<input name="Jmeno" type="text" id="Jmeno" style="width:200px;" />
V ASP.NET:
<asp:TextBox ID="Heslo" Runat="server" TextMode="Password" Width="200px" />
Po přeložení do HTML:
<input name="Heslo" type="password" id="Heslo" style="width:200px;" />
V ASP.NET:
<asp:TextBox ID="Zprava" Runat="server" TextMode="MultiLine" Rows="10" Columns="30" />
Po přeložení do HTML:
<textarea name="Zprava" rows="10" cols="30" id="Zprava"></textarea>

Třída TextBox má veškeré veřejné metody zděděné z nadřazených tříd. Budeme se jim věnovat při vytváření vlastních ovládacích prvků.

Třída TextBox má jedinou nezděděnou událost TextChanged:

Název události Delegát události Argument události Význam události
TextChanged EventHandler EventArgs Pokud se text změnil mezi dvěma odesláními na server.

Ukažme si, jak se řeší spuštění události v textovém poli:

TextBoxSAutoPostBack.aspx
<%@ Page language="c#" Codebehind="TextBoxSAutoPostBack.aspx.cs" AutoEventWireup="false" Inherits="WeboveOvladaciPrvky.TextBoxSAutoPostBack" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
   <HEAD>
      <title>TextBox s AutoPostBack</title>
      <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
      <meta name="CODE_LANGUAGE" Content="C#">
      <meta name="vs_defaultClientScript" content="JavaScript">
      <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
   </HEAD>
   <body MS_POSITIONING="GridLayout">
      <form id="Form1" method="post" runat="server">
         Testovací textové pole:
         <asp:TextBox ID="TestovaciTextovePole" Runat="server" AutoPostBack="True" />
         <br>
         <asp:Label ID="OvereniZadani" Runat="server" />
      </form>
   </body>
</HTML>
TextBoxSAutoPostBack.aspx.cs
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace WeboveOvladaciPrvky
{
   public class TextBoxSAutoPostBack : System.Web.UI.Page
   {
      protected System.Web.UI.WebControls.TextBox TestovaciTextovePole;
      protected System.Web.UI.WebControls.Label OvereniZadani;
   
      private void Page_Load(object sender, System.EventArgs e)
      {
         // Put user code to initialize the page here
      }

      #region Web Form Designer generated code
      override protected void OnInit(EventArgs e)
      {
         //
         // CODEGEN: This call is required by the ASP.NET Web Form Designer.
         //
         InitializeComponent();
         base.OnInit(e);
      }
      
      /// <summary>
      /// Required method for Designer support - do not modify
      /// the contents of this method with the code editor.
      /// </summary>
      private void InitializeComponent()
      {   
         this.TestovaciTextovePole.TextChanged += new System.EventHandler(this.TestovaciTextovePole_TextChanged);
         this.Load += new System.EventHandler(this.Page_Load);

      }
      #endregion

      // Při změně textu v textovém poli:
      private void TestovaciTextovePole_TextChanged(object sender, System.EventArgs e)
      {
         OvereniZadani.Text = "Zadali jste: " + TestovaciTextovePole.Text;
      }
   }
}

Spusťte stránku, která bude vypadat podobně jako na tomto obrázku:

Napište text a zadejte Enter podobně, jako to děláte na vyhledávacích portálech. Stránka pak bude vypadat následovně:

Určitě jste také postřehli, že se stránka mezi tím poslala na server, ten stránku zpracoval a poslal jinou HTML stránku. Jak ale probíhá takové odeslání? Vždyť v HTML (resp. v DHTML) se řeší odeslání pomocí prvku <input type="submit"> (resp. pomocí funkce submit() formuláře). A takovým způsobem ASP.NET překládá svůj kód do HTML, což můžeme zjistit při zobrazení zdrojového kódu:

Zde jsou zajímavá místa:

  1. V HTML prvku je atribut s událostí onchange v klientském skriptovacím jazyce JavaScript. Událost volá funkci __doPostBack s 1. argumentem tvořícím identifikátor tohoto prvku a s 2. argumentem reprezentujícím prázdný řetězec:
    <input name="TestovaciTextovePole" type="text" value="Ahoj" onchange="__doPostBack('TestovaciTextovePole','')" language="javascript" id="TestovaciTextovePole" />
  2. Funkce __doPostBack je v dokumentu definována v JavaScriptu:

  3. function __doPostBack(eventTarget, eventArgument) {
       var theform;
       if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
          theform = document.Form1;
       }
       else {
          theform = document.forms["Form1"];
       }
       theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
       theform.__EVENTARGUMENT.value = eventArgument;
       theform.submit();
    }
    Funkce naplní svými argumenty skrytá pole v HTML kódu:
    <input type="hidden" name="__EVENTTARGET" value="" />
    <input type="hidden" name="__EVENTARGUMENT" value="" />
    A nakonec odešle formulář.

  4. Na straně serveru se získají hodnoty se skrytých polí a může dojít ke zpracování.

V tomto příkladu si všimněme ještě jednoho zjímavého místa. Je zde další skryté pole s názvem __VIEWSTATE. V jeho hodnotě je zakódována hodnota všech ovládacích prvků stránky, které mají nastavenu vlastnost EnableViewState na true. Pomocí tohoto pole si prvky ukládají svůj stav mezi dvěma odesláními na server a zpět ke klientovi.



Úkoly ke kapitole "Ovládací prvek TextBox"

Vytvořte aplikaci ASP.NET, která bude mít následující vzhled:

Po zadání hodnot a odeslání bude vypadat takto:

Hodnocení kapitoly "Ovládací prvek TextBox"
Oslovila vás tato kapitola?
Ohodnoťte její obsah počtem bodů od 1 (nejhorší) do 10 (nejlepší):
Zatím nikdo nehodnotil. Buďte první.
Diskuze ke kapitole "Ovládací prvek TextBox"

Napadá vás zajímavá otázka související s touto kapitolou?

Přidejte do diskuze


Vyhledávání
Programovací jazyk C# | Programování Windows Forms | Architektura .NET | ASP.NET | Dodatky | Diskuze
RNDr. Dušan Kovář, Ph.D.
Gymnázium Olomouc-Hejčín