Intro To ASP - NET and Web Forms
Intro To ASP - NET and Web Forms
Prerequisites
This module assumes that you understand the fundamentals of
C# programming ADO.NET
A background in web development (HTML, JavaScript, DHTML, CGI, Active Server Pages) would be helpful, but is not required
Learning Objectives
What is ASP.NET; why it was developed ASP.NET features Programming Web Forms
Agenda
Background ASP.NET Overview Programming Model Programming Basics Server Controls Data Binding Conclusion
Background
Web Architecture
Client
Request: http://www.digimon.com/default.asp
PC/Mac/Unix/... + Browser
Network
HTTP, TCP/IP
Response: <html>.</html>
Server
Web Server
Background
Web Development Technologies
Client-side technologies
Server-side technologies
Background
What is ASP?
Server-side programming technology Consists of static HTML interspersed with script ASP intrinsic objects (Request, Response, Server, Application, Session) provide services Commonly uses ADO to interact with databases Application and session variables Application and session begin/end events ASP manages threads, database connections, ...
Background
What is ASP?
HTTP request
(form data, HTTP header data)
HTTP response
HTML, XML
ASP page
(static HTML, server-side logic)
Background
Demo: HelloWorld.asp
<html> <head><title>HelloWorld.asp</title></head> <body> <form method=post"> <input type="submit" id=button1 name=button1 value="Push Me" /> <% if (Request.Form("button1") <> "") then Response.Write "<p>Hello, the time is " & Now() end if %> </form> </body> </html>
Background
ASP Successes
Simple procedural programming model Access to COM components
ActiveX Data Objects (ADO) File System Object Custom components VBScript, JScript leverages existing skills
Support for multiple scripting languages ASP has been very popular
Background
ASP Challenges
Coding overhead (too much code)
Code readability (too complex; code and UI intermingled) Maintaining page state requires more code Reuse is difficult Supporting many types of browsers is difficult Deployment issues (e.g. DLL locking) Session state scalability and availability Limited support for caching, tracing, debugging, etc. Performance and safety limitations of script
Agenda
Background ASP.NET Overview Programming Model Programming Basics Server Controls Data Binding Conclusion
ASP.NET Overview
ASP.NET provides services to allow the creation, deployment, and execution of Web Applications and Web Services Like ASP, ASP.NET is a server-side technology Web Applications are built using Web Forms Web Forms are designed to make building web-based applications as easy as building Visual Basic applications
ASP.NET Overview
Goals
Keep the good parts of ASP and improve the rest Simplify: less code, easier to create and maintain Multiple, compiled languages Fast Scalable Manageable Available Customizable and extensible Secure Tool support
ASP.NET Overview
Key Features
Web Forms Web Services Built on .NET Framework Simple programming model Maintains page state Multibrowser support XCOPY deployment XML configuration Complete object model
Session management Caching Debugging Extensibility Separation of code and UI Security ASPX, ASP side by side Simplified form validation Cookieless sessions
ASP.NET Overview
Demo: HelloWorld.aspx
<%@ Page language="c#" %> <html> <head></head> <script runat="server"> public void B_Click (object sender, System.EventArgs e) { Label1.Text = "Hello, the time is " + DateTime.Now; } </script> <body> <form method="post" runat="server"> <asp:Button onclick="B_Click" Text="Push Me runat="server /> <p> <asp:Label id=Label1 runat="server" /> </form> </body> </html>
ASP.NET Overview
Architecture
ASP.NET is built upon
ASP.NET Overview
Architecture
Internet Information Server (IIS)
Tool to manage IIS Provides a mapping between URL and file path E.g., on my machine the URL: http://localhost/CS594 maps to the file path: C:\_CS594Fall2001
Virtual Directories
ASP.NET Overview
Architecture
VB C++ C# JScript
Visual Studio.NET
Common Language Specification ASP.NET: Web Services and Web Forms Windows Forms
Agenda
Background ASP.NET Overview Programming Model Programming Basics Server Controls Data Binding Conclusion
Programming Model
Controls and Events
Server-side programming model Based on controls and events
Higher level of abstraction than ASP Requires less code More modular, readable, and maintainable
Programming Model
Controls and Events
Button
List
Text
Browser
ASP.NET
Event handlers
Programming Model
ASP.NET Object Model
User code executes on the web server in page or control event handlers Controls are objects, available in server-side code
Derived from System.Web.UI.Control Derived from System.Web.UI.Page which is a descendant of System.Web.UI.Control A page can have methods, properties, etc.
Programming Model
Postbacks
A postback occurs when a page generates an HTML form whose values are posted back to the same page A common technique for handling form data In ASP and other server-side technologies the state of the page is lost upon postback... Unless you explicitly write code to maintain state This is tedious, bulky and error-prone
Programming Model
Postbacks Maintain State
By default, ASP.NET maintains the state of all server-side controls during a postback Can use method="post" or method="get" Server-side control objects are automatically populated during postback No state stored on server Works with all browsers
Programming Model
Server-side Controls
Multiple sources of controls
Controls range in complexity and power: button, text, drop down, calendar, data grid, ad rotator, validation Can be populated via data binding
Programming Model
Automatic Browser Compatibility
Controls can provide automatic browser compatibility Can target UpLevel or DownLevel browsers
UpLevel browsers support additional functionality, such as JavaScript and DHTML DownLevel browsers support HTML 3.2
Programming Model
Automatic Browser Compatibility
IE 4
Button Menu Text
Netscape
Button Menu Text
Button Control
Menu Control
IE 5.5
Button Menu Text
Text Control
IE 6
Button Menu Text
ASP.NET
Event handlers
...
Programming Model
Code-behind pages
Two styles of creating ASP.NET pages
Controls and code in .aspx file Controls in .aspx file, code in code-behind page
Code-behind pages allow you to separate the user interface design from the code
Programming Model
Automatic Compilation
Just edit the code and hit the page ASP.NET will automatically compile the code into an assembly Compiled code is cached in the CLR Assembly Cache Subsequent page hits use compiled assembly If the text of the page changes then the code is recompiled
Programming Model
Automatic Compilation
Agenda
Background ASP.NET Overview Programming Model Programming Basics Server Controls Data Binding Conclusion
Programming Basics
Page Syntax
The most basic page is just static text
Any HTML page can be renamed .aspx Directives: <%@ Page Language=C# %> Server controls: <asp:Button runat=server> Code blocks: <script runat=server></script> Data bind expressions: <%# %> Server side comments: <%-- --%> Render code: <%= %> and <% %>
Use is discouraged; use <script runat=server> with code in event handlers instead
Programming Basics
The Page Directive
Lets you specify page-specific attributes, e.g.
AspCompat: Compatibility with ASP Buffer: Controls page output buffering CodePage: Code page for this .aspx page ContentType: MIME type of the response ErrorPage: URL if unhandled error occurs Inherits: Base class of Page object Language: Programming language Trace: Enables tracing for this page Transaction: COM+ transaction setting
Programming Basics
Server Control Syntax
Controls are declared as HTML tags with runat=server attribute
<input type=text id=text2 runat=server /> <asp:calendar id=myCal runat=server />
Control is implemented as an ASP.NET class It names the instance available during postback Just like Dynamic HTML
Programming Basics
Server Control Properties
Tag attributes map to control properties
<asp:button id=c1" Text="Foo" runat=server> <asp:ListBox id=c2" Rows="5" runat=server>
Tags and attributes are case-insensitive Control properties can be set programmatically
c1.Text = Foo; c2.Rows = 5;
Programming Basics
Maintaining State
By default. controls maintain their state across multiple postback requests
Implemented using a hidden HTML field: __VIEWSTATE Works for controls with input data (e.g. TextBox, CheckBox), non-input controls (e.g. Label, DataGrid), and hybrids (e.g. DropDownList, ListBox) Set EnableViewState=false Lets you minimize size of __VIEWSTATE
Programming Basics
Maintaining State
Demo: MaintainingState.asp, MaintainingState.aspx
Programming Basics
Server Code Blocks
Server code lives in a script block marked runat=server
<script language="C#" runat=server> <script language="VB" runat=server> <script language="JScript" runat=server>
Variables, methods, event handlers, properties They become members of a custom Page object
Programming Basics
Page Events
Pages are structured using events
Enables clean code organization Avoids the Monster IF statement Less complex than ASP pages e.g. Page_Load, Page_Unload Button1_Click Textbox1_Changed
Programming Basics
Page Event Lifecycle
Initialize Restore Control State Load Page Control Events
1. Change Events 2. Action Events Textbox1_Changed Button1_Click Page_Init Page_Load
Page_Unload
Programming Basics
Page Loading
Page_Load fires at beginning of request after controls are initialized
Programming Basics
Page Loading
Page_Load fires on every request
Use Page.IsPostBack to execute conditional logic If a Page/Control is maintaining state then need only initialize it when IsPostBack is false
protected void Page_Load(Object s, EventArgs e) { if (! Page.IsPostBack) { // Executes only on initial page load Message.Text = "initial value"; } // Rest of procedure executes on every request }
Programming Basics
Server Control Events
Change Events
By default, these execute only on next action event E.g. OnTextChanged, OnCheckedChanged Change events fire in random order Cause an immediate postback to server E.g. OnClick No client script required, no applets, no ActiveX Controls!
Action Events
Programming Basics
Wiring Up Control Events
Control event handlers are identified on the tag
<asp:button onclick="btn1_click runat=server> <asp:textbox onchanged="text1_changed runat=server>
Programming Basics
Event Arguments
Events pass two arguments:
Usually the object representing the control that generated the event Allows you to use the same event handler for multiple controls Provides additional data specific to the event EventArgs itself contains no data; a class derived from EventArgs will be passed
Programming Basics
Page Unloading
Page_Unload fires after the page is rendered
Programming Basics
Import Directive
Adds code namespace reference to page
Avoids having to fully qualify .NET types and class names Equivalent to the C# using directive
<%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Net" %> <%@ Import Namespace="System.IO" %>
Programming Basics
Page Class
The Page object is always available when handling server-side events Provides a large set of useful properties and methods, including:
Application, Cache, Controls, EnableViewState, EnableViewStateMac, ErrorPage, IsPostBack, IsValid, Request, Response, Server, Session, Trace, User, Validators DataBind(), LoadControl(), MapPath(), Validate()
Agenda
Background ASP.NET Overview Programming Model Programming Basics Server Controls Data Binding Conclusion
Server Controls
ASP.NET ships with ~50 built-in controls Organized into logical families
HTML controls
Controls / properties map 1:1 with HTML Richer functionality More consistent object model
Web controls
Server Controls
HTML Controls
Work well with existing HTML designers Properties map 1:1 with HTML
table.bgcolor ="red;
Can specify client-side event handlers Good when quickly converting existing pages Derived from
System.Web.UI.HtmlControls.HtmlControl
Server Controls
HTML Controls
Supported controls
<textarea> <button> <input type=text> <input type=file> <input type=submit> <input type=button> <input type=reset> <input type=hidden>
Server Controls
HTML Controls
Demo 1: HTMLControls1.aspx
Demo 2: HTMLControls2.aspx
Server Controls
HTML Controls
Can use controls two ways:
Event code will read the values of other controls (e.g. text, check boxes, radio buttons, select lists)
Server Controls
Web Controls
Consistent object model
Label1.BackColor = Color.Red; Table.BackColor = Color.Blue;
Richer functionality
Server Controls
Web Controls
Web controls appear in HTML markup as namespaced tags Web controls have an asp: prefix
<asp:button onclick="button1_click runat=server> <asp:textbox onchanged="text1_changed runat=server>
Defined in the System.Web.UI.WebControls namespace This namespace is automatically mapped to the asp: prefix
Server Controls
Web Controls
Web Controls provide extensive properties to control display and format, e.g.
Font BackColor, ForeColor BorderColor, BorderStyle, BorderWidth Style, CssClass Height, Width Visible, Enabled
Server Controls
Web Controls
Four types of Web Controls
Server Controls
Intrinisic Controls
Correspond to HTML controls Supported controls
Server Controls
Intrinisic Controls
TextBox, ListControl, CheckBox and their subclasses dont automatically do a postback when their controls are changed Specify AutoPostBack=true to make change events cause a postback
Server Controls
List Controls
Controls that handle repetition Supported controls
Server Controls
List Controls
Repeater, DataList and DataGrid controls
Powerful, customizable list controls Expose templates for customization Can contain other controls Provide event bubbling through their OnItemCommand event More about these controls and templates later
Server Controls
CheckBoxList & RadioButtonList
Provides a collection of check box or radio button controls Can be populated via data binding
<asp:CheckBoxList id=Check1 runat="server"> <asp:ListItem>Item 1</asp:ListItem> <asp:ListItem>Item 2</asp:ListItem> <asp:ListItem>Item 3</asp:ListItem> <asp:ListItem>Item 4</asp:ListItem> <asp:ListItem>Item 5</asp:ListItem> </asp:CheckBoxList>
Server Controls
Intrinisic & Simple List Controls
Demo 1: WebControls1.aspx
Demo 2: WebControls2.aspx
Server Controls
Rich Controls
Custom controls with rich functionality Supported Controls
<asp:calendar> <asp:adrotator>
More will be added 3rd party controls are coming Demo: RichControls1.aspx
Server Controls
Validation Controls
Rich, declarative validation Validation declared separately from input control Extensible validation framework Supports validation on client and server
Automatically detects uplevel clients Avoids roundtrips for uplevel clients Prevents users from spoofing Web Forms
Server Controls
Validation Controls
<asp:RequiredFieldValidator>
Ensures that a value is entered Checks if value is within minimum and maximum values Compares value against constant, another control or data type Tests if value matches a predefined pattern Lets you create custom client- or server-side validation function Displays list of validation errors in one place
<asp:RangeValidator>
<asp:CompareValidator>
<asp:RegularExpressionValidator>
<asp:CustomValidator>
<asp:ValidationSummary>
Server Controls
Validation Controls
Validation controls are derived from
System.Web.UI.WebControls.BaseValidator,
which is derived from the Label control Validation controls contain text which is displayed only if validation fails Text property is displayed at control location ErrorMessage is displayed in summary
Server Controls
Validation Controls
Validation controls are associated with their target control using the ControlToValidate property
<asp:TextBox id=TextBox1 runat=server />
<asp:RequiredFieldValidator id="Req1" ControlToValidate="TextBox1" Text="Required Field" runat=server />
Can create multiple validation controls with the same target control
Server Controls
Validation Controls
Page.IsValid indicates if all validation controls on the page succeed
void Submit_click(object s, EventArgs e) { if (Page.IsValid) { Message.Text = "Page is valid!"; } }
Server Controls
Validation Controls
Display property controls layout
Static: fixed layout, display wont change if invalid Dynamic: dynamic layout None: no display; can still use ValidationSummary and Page.IsValid
Type property specifies expected data type: Currency, Date, Double, Integer, String
Server Controls
Validation Controls
Can force down-level option
Server Controls
Validation Controls
Demo: ValidationControls1.aspx
Agenda
Background ASP.NET Overview Programming Model Programming Basics Server Controls Data Binding Conclusion
Data Binding
How to Populate Server Controls?
Specify the data in the controls tags
This is okay if you need to populate a simple value or list, but quickly gets too complicated for populating sophisticated displays Create an object that holds the data (DataSet, Array, string, int, etc.) Associate that object with the control
Data binding
Data Binding
What Is It?
Provides a single simple yet powerful way to populate Web Form controls with data
Enables clean separation of code from UI Properties, expressions, method calls Collections (Array, Hashtable, etc.) DataSet, DataTable, DataView, DataReader XML Requires code to reapply to data model
Data Binding
What Is It?
Allows you to specify an expression When the DataBind method of the control is called, the expression is evaluated and bound
DataBind for a single control (and subcontrols) Page.DataBind binds all controls on a page
Works for scalars, e.g. Label control Works for lists, e.g. DropDown control, ListBox control, etc. Enables the use of templates
Data Binding
Scalar Expressions
Data binding expression: <%# expression %> Expression is evaluated when DataBind() is called
<asp:Label id=label1 Text=<%# The result is + (1 + 2) + , the time is + DateTime.Now.ToLongTimeString() %> runat="server" /> public void Page_Load(object s, EventArgs e) { if (! Page.IsPostBack) Page.DataBind(); }
Data Binding
Scalar Expressions
Demo: DataBinding1.aspx
Data Binding
Simple Lists
Data binding a list creates a user interface element for each item in the list Each item contains text (displayed to user) and an optional value (not displayed) The simple list controls:
<asp:ListBox>
Data Binding
Simple Lists
Steps to data bind a list control
Declare the list control Optionally set DataValueField and DataTextField Set its DataSource Call DataBind() method
Data Binding
Simple Lists
Demo: DataBinding2.aspx
Data Binding
Database
Data binding can be used to populate server controls with data from a database
Bind to a DataReader (preferred) Bind to a DataView of a DataSet Specify value and text with DataValueField and DataTextField, respectively
Data Binding
Data Source Example
DataView GetSampleData() { DataSet ds; SqlConnection cxn; SqlDataAdapter adp; cxn = new SqlConnection("server=localhost; " + "uid=sa;pwd=;database=Northwind"); adp = new SqlDataAdapter( "select CategoryID, CategoryName from Categories", cxn); ds = new DataSet(); adp.Fill(ds, "Categories"); return ds.Tables["Categories"].DefaultView; }
Data Binding
List Binding Examples
void Page_Load(object s, EventArgs e) { ListBox1.DataSource = GetSampleData(); ListBox1.DataValueField = "CategoryID"; ListBox1.DataTextField = "CategoryName"; ListBox1.DataBind(); } <asp:ListBox id="ListBox1" runat="server" /> void Page_Load(object s, EventArgs e) { ListBox1.DataBind(); } <asp:ListBox id="ListBox1" runat="server" DataSource=<%# GetSampleData() %> DataValueField=CategoryID DataTextField=CategoryName />
Data Binding
Binding to a Database
Demo: DataBinding3.aspx
Data Binding
DataGrid
Full-featured list output Default look is a grid Default is to show all columns, though you can specify a subset of columns to display Columns can be formatted with templates Optional paging Updateable
Data Binding
Binding to All Columns
Binding all columns in the datasource
void Page_Load(object s, EventArgs e) { myDataGrid.DataSource = GetSampleData(); myDataGrid.DataBind(); } <asp:datagrid id=myDataGrid runat="server" />
Data Binding
Binding to Specific Columns
By default, DataGrid will display all columns To control columns to display:
Data Binding
Binding to Specific Columns
Binding to specific columns in the datasource
Declare an <asp:DataGrid> Declare its Columns collection Set its DataSource Call its DataBind() method
<asp:datagrid id=myDataGrid autogeneratecolumns=false runat=server> <Columns> <asp:BoundColumn HeaderText=Id" DataField="title_id" /> <asp:BoundColumn HeaderText="Title DataField="title"/> </Columns> </asp:datagrid>
Data Binding
DataGrid Paging
When there is too much data to display in one screen, a DataGrid can provide automatic paging
Data Binding
DataGrid Demo
Demo: DataBinding4.aspx
Demo: DataBinding5.aspx
Data Binding
Templates
Templates provide a powerful way to customize the display of a server control
Customize structure not just style Can use controls or other HTML within a template 3rd party controls can expose new templates
With data binding, templates specify a set of markup (HTML or server controls) for each bound piece of data
Not just specifying formatting and style for a column No fixed set of templates Controls may define their own and expose any number of them
Data Binding
Templates
Standard templates for list-bound controls
HeaderTemplate: rendered once before all data bound rows ItemTemplate: rendered once for each row in the data source AlternatingItemTemplate: like ItemTemplate, but when present is used for every other row SeparatorTemplate: rendered between each row FooterTemplate: rendered once, after all data bound rows
Data Binding
Templates
HeaderTemplate
ItemTemplate
SeparatorTemplate
AlternatingItemTemplate
FooterTemplate
Data Binding
Data Binding in Templates
Templates need to access the bound data Container is an alias for the templates containing control DataItem is an alias for the current row of the datasource DataBinder.Eval is a utility function provided to retrieve and format data within a template
<%# DataBinder.Eval(Container.DataItem, "price", "$ {0}") %>
Data Binding
Repeater Control
Provides simple output of a list of items No inherent visual form Templates provide the visual form No paging Can provide templates for separators Not updateable
Data Binding
Repeater Control
<asp:Repeater id="repList" runat="server"> <template name="HeaderTemplate"> <table> <tr><td>Title</td><td>Type</td></tr> </template> <template name="ItemTemplate"> <tr> <td><%# DataBinder.Eval(Container.DataItem,"title_id") %></td> <td><%# DataBinder.Eval(Container.DataItem,"type") %></td> </tr> </template>
<template name="FooterTemplate"> </table> </template> </asp:Repeater>
Data Binding
DataList Control
Provides list output with editing Default look is a table Customized via templates Directional rendering (horizontal or vertical) Single and multiple selection Alternate item Updateable No paging
Data Binding
DataList Control
void Page_Load(object s, EventArgs e) { myDataGrid.DataSource = GetSampleData(); myDataGrid.DataBind(); } <asp:datalist id=myDataList runat=server> <template name="itemtemplate"> <b>Title id:</b> <%# DataBinder.Eval(Container.DataItem, "title_id") %> <br> <b>Title:</b> <%# DataBinder.Eval(Container.DataItem, "title") %> </template> </asp:datalist>
Data Binding
Templates Demo
Demo: DataBinding6.aspx, DataBinding7.aspx
Using templates and data binding to a database with DataGrid, Repeater and DataList controls
Agenda
Background ASP.NET Overview Programming Model Programming Basics Server Controls Data Binding Conclusion
Conclusion
We covered
What ASP.NET and Web Forms are ASP.NET Programming Essentials Server Controls Data Binding Templates
Conclusion
Next time, well cover
Web Applications Configuration Tracing Session Management Error Handling Deployment Security Architecture Extensibility (User Controls and Custom Controls)
Resources
General Sites
http://msdn.microsoft.com/net/aspnet/default.asp http://www.asp.net/ http://www.fmexpense.com/quickstart/aspplus/defa ult.htm http://www.asptoday.com/ http://www.aspng.com/aspng/index.aspx http://www.4guysfromrolla.com/ http://www.aspfree.com/ http://www.devx.com/dotnet/ http://www.ibuyspy.com/
Resources
ASP.NET Overview
Validation
http://msdn.microsoft.com/msdnmag/issues/0900/ASPPlus/A SPPlus.asp http://msdn.microsoft.com/library/techart/aspplusvalid. htm http://msdn.microsoft.com/msdnmag/issues/01/03/cutting/ cutting0103.asp http://msdn.microsoft.com/msdnmag/issues/01/04/cutting/ cutting0104.asp http://msdn.microsoft.com/msdnmag/issues/01/05/cutting/ cutting0105.asp http://msdn.microsoft.com/msdnmag/issues/01/02/cutting/ cutting0102.asp
Databinding in 3 parts