Understanding Event Handling and Delegates in ASP.NET Web Forms
This guide explores the fundamentals of event handling and delegates in ASP.NET Web Forms, emphasizing the importance of delegates in managing events without hardwiring components. It discusses the creation of delegate classes and their usage in event handling for buttons and other components, facilitating asynchronous method calls. The content draws from resources like "C# in a Nutshell" and "Programming C#", providing a structured look at how ASP.NET handles user interactions through events, postbacks, and session state management.
Understanding Event Handling and Delegates in ASP.NET Web Forms
E N D
Presentation Transcript
C#/.NET Basics 2 Some code is from “C# in a Nutshell” and “Programming C#” Carnegie Mellon University MSCF
This week • Event Handling and delegates • ASP.NET Web Forms • ASP.NET Web Services Carnegie Mellon University MSCF
Event Handling Model • Delegates listen for the events and call registered handlers • Each component has a delegate for every event it can raise • We register a method with the delegate and the delegate will call the method asynchronously Carnegie Mellon University MSCF
Delegates (1) • A Button, for example, needs to notify some object when it is pushed • We don’t want to hardwire (in the button) which object to call • A delegate is a reference type used to encapsulate a method with particular parameter types Carnegie Mellon University MSCF
Delegate (2) using System; delegate String Foo(String x); // create a delegate class class Test { public static void Main() { Foo f = new Foo(ConvertToUpperCase); // create a delegate object String answer = f("abcd"); // call the method in the // object Console.WriteLine(answer); } public static String ConvertToUpperCase(String s) { return s.ToUpper(); } } Carnegie Mellon University MSCF
Delegate (3) Delegate reference public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.Button multiplyButton; public void foo() { this.multiplyButton = new System.Windows.Forms.Button(); this.multiplyButton.Text = "Multiply"; this.multiplyButton.Click += new System.EventHandler(this.multiplyButton_Click); } private void multiplyButton_Click(object sender, System.EventArgs e) { textBox3.Clear(); string op1Str = op1.Text; string op2Str = op2.Text; : } Delegate Encapsulated method Carnegie Mellon University MSCF
Multicast Delegate using System; // From C# In A Nutshell delegate void MethodInvoker(); // define delegate class class Test { static void Main() { // create a Test object // and call its constructor new Test(); } Carnegie Mellon University MSCF
Test() { MethodInvoker m = null; m += new MethodInvoker(Foo); // overloaded += m += new MethodInvoker(Goo); // delegate holds m(); // pointers to two } // methods MethodInvoker void Foo() m void Goo() Carnegie Mellon University MSCF
void Foo() { Console.WriteLine("Foo"); } void Goo() { Console.WriteLine("Goo"); } } Output: Foo Goo Carnegie Mellon University MSCF
ASP.NET Web Forms (1) • Web Forms bring rapid appplication development to the web • Similar technology is available on J2EE platforms (struts, Java Server Faces) • Drag and drop development for the web tier – write event handlers as in Windows Forms • User interacts with the sever via a standard browser Carnegie Mellon University MSCF
ASP.NET Web Forms (2) • Web pages are dynamically generated • Standard HTML is sent to the browser • Notepad would work but Visual Studio makes life easy • The user interface code is in an .aspx file • The logic (C# code) is stored in a separate file (containing event handling code) Carnegie Mellon University MSCF
ASP.NET Web Forms (3) • Postback events are handled on the server with an HTTP request. For example, the submit button is clicked. • Non-postback events are not handled by the server immediately. For example, text is entered into a form or the mouse is moved. • State is automatically added to an otherwise stateless protocol. .NET maintains the user’s session. Carnegie Mellon University MSCF
Web Form Life Cycle • Complicated series of activities similar to what is found in J2EE struts and JSF • For this class let’s just say that a lot of pre- and post-processing goes on for each web request Carnegie Mellon University MSCF
Creating A Web Form(1) • Prerequisites: IIS and Front Page Server Extensions (use Internet Service Manager and right click on the web site/All Tasks/Configure Server Extensions) • Start/Microsoft Visual Studio .NET/ New Project/Visual C#/ASP.NET Web Application/BinomialTreeWebApp • Generated code goes into c:\Inetpub\wwwroot\BinomialTreeWebApp Carnegie Mellon University MSCF
Creating A Web Form(2) • Two files generated - The .aspx file holds the HTML - The aspx.cs file holds the C# • To see the C# code right click the form and select view code • Note that you can see the design view or the HTML view (tabs on bottom) Carnegie Mellon University MSCF
Web Services “The internet is evolving from a collection of isolated web sites and applications into a general communication bus for distributed applications.” Pradeep Tapadiya, author of “.NET Programming” Carnegie Mellon University MSCF
ASP.NET Web Services 0) Check if IIS is running by attempting to visit http://localhost 1) If it's not running click Start/Settings/Control Panel/Add Remove Programs/ Add Remove Windows Components and enable IIS. 2) If .NET was installed after IIS reconfigure IIS by running aspnet_regiis.exe /i from a command prompt. Carnegie Mellon University MSCF
ASP.NET Web Services Suppose we want to provide a student name given a student ID. Carnegie Mellon University MSCF
ASP.NET Server Code <%@ WebService Language="C#" Class="Student.QueryService" %> // CoolService.asmx using System.Web.Services; using System.Collections; namespace Student { [WebService(Namespace="http://localhost/ACoolQueryService/")] public class QueryService : WebService { private static Hashtable nameValuePairs; Carnegie Mellon University MSCF
static QueryService() { nameValuePairs = new Hashtable(); nameValuePairs.Add("12345","Moe"); nameValuePairs.Add("01234","Curly Joe"); nameValuePairs.Add("54321","Larry"); } [WebMethod] public string GetName(string id) { return (string)nameValuePairs[id]; } } } Carnegie Mellon University MSCF
Create a virtual directory under IIS • Start • Settings • Control Panel • Administrative Tools • Select Internet Information Services • Expand and select the default web site • Click Action/New/Virtual Directory • Provide a name (ACoolQueryService in this case) and browse to the directory holding the .asmx file • Select everything but write Carnegie Mellon University MSCF
Checking the service • Visit the service with your browser • http://localhost/ACoolQueryService/CoolService.asmx • HTML is generated that allows you to test the service via standard HTTP Carnegie Mellon University MSCF
Testing With HTTP Get Request GET /ACoolQueryService/CoolService.asmx/GetName?id=string HTTP/1.1 Host: localhost HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length Response <?xml version="1.0" encoding="utf-8"?> <string xmlns="http://localhost/ACoolQueryService/">string</string> Carnegie Mellon University MSCF
Testing with SOAP POST /ACoolQueryService/CoolService.asmx HTTP/1.1 Host: localhost Content-Type: text/xml; charset=utf-8 Content-Length: length of document SOAPAction: "http://localhost/ACoolQueryService/GetName" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> Carnegie Mellon University MSCF
<soap:Body> <GetName xmlns="http://localhost/ACoolQueryService/"> <id>string</id> </GetName> </soap:Body> </soap:Envelope> Carnegie Mellon University MSCF
SOAP Response HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> Carnegie Mellon University MSCF
<soap:Body> <GetNameResponse xmlns= "http://localhost/ACoolQueryService/"> <GetNameResult>string</GetNameResult> </GetNameResponse> </soap:Body> </soap:Envelope> Carnegie Mellon University MSCF