C#: atestat și pregătire ONTI

C#: primul formular web cu ASP.NET Web Forms

Înțelege ciclul unei pagini ASP.NET Web Forms printr-un exemplu C# local. Creează controale cu ID stabil și codifică textul utilizatorului la afișare.

O aplicație web nu păstrează aceeași fereastră vie ca Windows Forms. Browserul trimite cereri, iar serverul reconstruiește pagina și produce HTML. Pentru a lega pregătirea desktop de un modul web, folosim ASP.NET Web Forms pe .NET Framework 4.8, într-un proiect local Windows cu IIS Express. Acesta este un model diferit de ASP.NET Core.

Cum lucrezi cu exemplul

Arhiva conține un Web Site ASP.NET Web Forms pentru .NET Framework 4.8: Default.aspx, Web.config și clasa din App_Code. Deschide ca Web Site în Visual Studio pe Windows și rulează local cu IIS Express. Nu este un proiect ASP.NET Core.

Descarcă sursele și instrucțiunile.

Ideea și pașii de implementare

Creează un ASP.NET Empty Web Site pentru .NET Framework 4.8. Pune clasa DemoPage în App_Code/DemoPage.cs și creează Default.aspx cu directiva Page care moștenește DemoPage, indicată în arhiva lecției. Controalele dinamice sunt recreate în OnInit, cu aceleași ID-uri la fiecare cerere, înainte de încărcarea datelor de postback.

OnLoad pune valoarea inițială numai dacă IsPostBack este false. Altfel ai suprascrie textul trimis de utilizator. Handler-ul butonului construiește răspunsul folosind HttpUtility.HtmlEncode, astfel încât textul să fie prezentat ca date, nu interpretat drept marcaj HTML.

Exemplu și rezultat așteptat

La prima cerere apare Ana în câmp. Schimbi în Mihai și trimiți formularul: pagina răspunde Salut, Mihai. Reîncărcarea și trimiterea sunt cereri distincte, nu apeluri pe aceeași instanță permanentă a paginii. Nu există salvare în baza de date.

Schemă pentru lecția 46: Cerere inițială; OnInit: aceleași ID-uri; Postback: textul utilizatorului; HtmlEncode → răspuns HTML.Cerere inițială → OnInit: aceleași ID-uri → Postback: textul utilizatorului → HtmlEncode → răspuns HTML.Mărește schema ↗

Codul complet

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
public class DemoPage : Page {
    TextBox input;Literal output;
    protected override void OnInit(EventArgs e) {
        base.OnInit(e);var form=new HtmlForm {ID="mainForm"};
        input=new TextBox {ID="nameInput",MaxLength=80};var submit=new Button {ID="submit",Text="Saluta"};
        output=new Literal {ID="result"};submit.Click += Submit;
        form.Controls.Add(new Literal {Text="Nume: "});form.Controls.Add(input);form.Controls.Add(submit);form.Controls.Add(output);
        Controls.Add(form);
    }
    protected override void OnLoad(EventArgs e) {base.OnLoad(e);if(!IsPostBack)input.Text="Ana";}
    void Submit(object sender,EventArgs e) {
        string name=input.Text.Trim();
        output.Text=name.Length==0 || name.Length>80 ? "Introdu un nume de 1–80 de caractere." : "Salut, " + HttpUtility.HtmlEncode(name);
    }
}

Greșeli și limite

Nu pune parole sau date private în query string. Nu considera validarea din browser suficientă. Nu dezactiva mecanismele de validare ASP.NET doar pentru a accepta un exemplu cu markup; păstrează codificarea la ieșire și tratează cerințele de intrare separat. Nu promite că un proiect Web Forms poate rula ca ASP.NET Core prin schimbarea numelui.

Exersează

Testează prima încărcare, postback-ul cu alt nume și trimiterea unui șir gol. Verifică sursa HTML și identifică formularul produs. Adaugă o limită de 80 de caractere și aplic-o și pe server. Explică de ce inițializarea necondiționată în OnLoad ar pierde editarea utilizatorului.

Continuă parcursul

Parcursul complet de 50 de lecții

Bazele C#

Lecția precedentă: C#: proiect labirint cu BFS și drum desenat

Lecția următoare: C#: validare pe server și sesiune în Web Forms.

Referință: documentația Microsoft.

Întrebări frecvente

Web Forms este Windows Forms în browser?

Nu. Folosește cereri HTTP și ciclul paginii pe server, cu un model diferit de durată de viață.

De ce creez controalele în OnInit?

Pentru a le recrea stabil înainte de încărcarea datelor trimise la postback.

De ce codific textul la ieșire?

Pentru a-l afișa ca date, fără interpretarea lui drept HTML.

Un pas mai departe

Autentifică-te pentru a păstra progresul în cont.

Exersează cu o problemă →