Roadmap › ASP.NET Web Forms — Page Life Cycle, ViewState, Controls and State Management › Module: Getting Started
Lessons in this course (10)
2. Pages, code-behind, server controls and events
Basic★ Must knowLesson 2 of 10
aspx
<%@ Page Title="Products" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"
CodeBehind="Products.aspx.cs" Inherits="ShopWeb.Products" %>
<asp:Content ID="Main" ContentPlaceHolderID="MainContent" runat="server">
<asp:Label ID="lblMessage" runat="server" CssClass="text-success" />
<asp:TextBox ID="txtName" runat="server" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="txtName" ErrorMessage="Name is required" Display="Dynamic" />
<asp:DropDownList ID="ddlCategory" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlCategory_SelectedIndexChanged" />
<asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click" />
<asp:GridView ID="gvProducts" runat="server" AutoGenerateColumns="false" DataKeyNames="Id">
<Columns>
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:BoundField DataField="Price" HeaderText="Price" DataFormatString="{0:C}" />
</Columns>
</asp:GridView>
</asp:Content>csharp
public partial class Products : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e) // AutoEventWireup="true" wires Page_Load by name
{
if (!IsPostBack) // first visit only — otherwise you overwrite user input
{
ddlCategory.DataSource = ProductService.GetCategories();
ddlCategory.DataBind();
BindGrid();
}
}
protected void ddlCategory_SelectedIndexChanged(object sender, EventArgs e) => BindGrid();
protected void btnSave_Click(object sender, EventArgs e)
{
if (!Page.IsValid) return; // server-side validation result
ProductService.Add(txtName.Text.Trim(), ddlCategory.SelectedValue);
lblMessage.Text = "Saved";
BindGrid();
}
private void BindGrid()
{
gvProducts.DataSource = ProductService.GetByCategory(ddlCategory.SelectedValue);
gvProducts.DataBind();
}
}Control categories: HTML controls (<input> — plain), HTML server controls (<input runat="server"> — accessible in code), Web server controls (<asp:TextBox>), validation controls, data controls (GridView, Repeater, ListView, DetailsView, FormView), navigation (Menu, TreeView, SiteMapPath), login controls, user controls (.ascx) and custom controls.
Inline code expressions: <%= value %> (write, not encoded), <%: value %> (HTML-encoded — use this), <%# Eval("Name") %> (data binding), <%$ ConnectionStrings:Shop %> (expression builder).