Microsoft Study Bible

November 27, 2009

How to achieve Ajax in Asp.net 2.0?

 
ASP.NET 2.0 Client side Callbacks Framework
ASP.NET 2.0 has been released for a long time .The 2.0 framework has a great number of new features, one of which is Client side Callback. It can retrieve page values and populate them to an already-generated page with out reconstructing page. This makes it possible to use on a page with out going through the entire post back cycle; that means you can update your pages without completely redrawing the page. Client side Callback allows us to call the server-side methods without postback, which is consistent with the features of AJAX. However, AJAX can custom the method called that Callback of .NET 2.0 can not .The prerequisite to use Client Side Callback is to achieve System.Web.UI.IcallbackEventHandler interfaces, which contain two methods.
//call this method when the client callback
public void RaiseCallbackEvent(String eventArgument)
//After implementation of RaiseCallbackEvent , Call this method whose return value

// is sent back to the client side. 
  public string GetCallbackResult()

  
for example:
  .cs:
  String cbReference = Page.ClientScript.GetCallbackEventReference(
  this,”arg”, “ReceiveServerData”, “context”);
  String callbackScript;
  callbackScript = “function CallServer(arg, context)” + “{ ” + cbReference + “} ;”;
  Page.ClientScript.RegisterClientScriptBlock(
  this.GetType(),”CallServer”, callbackScript, true);
  javascript:

AJAX Introduction

AJAX is not a new programming language, but a new technique for creating better, faster, and more interactive web applications. With AJAX, a JavaScript can communicate directly with the server, with the XMLHttpRequest object. With this object, a JavaScript can trade data with a web server, without reloading the page.
AJAX uses asynchronous data transfer (HTTP requests) between the browser and the web server, allowing web pages to request small bits of information from the server instead of whole pages. The AJAX technique makes Internet applications smaller, faster and more user-friendly.
AJAX mechanism
When we used XmlHttp to achieve no-fresh page, we used XmlHttp to request a hidden page and Asp/Asp.Net of HttpHandler’own. Although in Ajax, we also request a hidden page ,the difference of the page of HttpHandler is achieved by ourselves.
Build your own AJAX:
1. Firstly we need to achieve a HttpHandler to respond the client’s request:
If we want to achieve self-define HttpHandler we should achieve IHttpHandler interfaces ,which contain a property and a method :
bool IHttpHandler.IsReusable
  void IHttpHandler.ProcessRequest(HttpContext context)
  Example:
  bool IHttpHandler.IsReusable
  {
  get { return true; }
  }
  void IHttpHandler.ProcessRequest(HttpContext context)
  {
  context.Response.Clear(); // To obtain the method called
  string methodName = context.Request.QueryString["me"];
  //To obtain the assembly information
  //Czhenq.AJAX.Class1.Dencode is self-defining string coding
string AssemblyName = Czhenq.AJAX.Class1.Dencode(context.Request.QueryString["as"]);
  //acquire the parameters of the method
  string Arguments = context.Request.QueryString["ar"]; //start to call the method
  Type type = Type.GetType(AssemblyName);
  MethodInfo method = type.GetMethod(methodName,
  BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance);
  if (method != null)
  {
  //The parameters are separated by “,”
  string[] args = Arguments.Split(”,”.ToCharArray());
  ParameterInfo[] paras = method.GetParameters();
  object[] argument = new object[paras.Length];
  for (int i = 0; i < argument.Length; i++)
  {
  if (i < args.Length) {
  //As the parameters passed from XmlHttp are all string type, all of them are must converted .
//Here just convert the parameters into Int32
  argument[i] = Convert.ToInt32(args[i]);
  }
  }
  object value = method.Invoke(Activator.CreateInstance(type, true), argument);
  if (value != null) context.Response.Write(value.ToString());
  else context.Response.Write(”error”);
  }
  //end of process
  context.Response.End();

2. Client side Javascript code:
function CallMethod(AssemblyName,MethodName,Argus)
  {
  var args = “”;
  for(var i=0;i)
  args += Argus[i] + “,”;
  if(args.length>0) args = args.substr(0,args.length-1);
  var xmlhttp = new ActiveXObject(’Microsoft.XMLHTTP’);
  url = “AJAX/AJAX.czhenq?as=” + AssemblyName + “&me=” + MethodName +”&ar=”+ args;
  xmlhttp.open(”POST”,url,false);
  xmlhttp.send();
  alert(xmlhttp.responseText);
  }

3.We have achieved a simple AJAX framework. Now we need to write a piece of code to test it.
Use your own AJAX
1. New a website, and use your written HttpHandler, and register your HttpHandler on Web.config to explain that those requests will use your written Handler. The following description is all of request ending up with “czq” will use “Czhenq.HttpHandlerFactory” to deal with them.
</type=”Czhenq.HttpHandlerFactory, Czhenq.AJAX”/>

2. Add a web page and copy the script to the page and add a method you want to call .
private string Add(int i, int j)
  { return TextBox1.Text;  }
3. Place a HieddenField control on the page which is named AssemblyName.And add the following code in the Page_Load.
string assemblyName = Czhenq.AJAX.Class1.Encode(
  typeof(_Default).AssemblyQualifiedName);
  AssemblyName.Value = assemblyName;

4. Add the following script on the page
 var assemblyName = document.getElementById(”AssemblyName”);
  var argus = new Array();
  argus.push(”100″);
  argus.push(”200″);
  CallMethod(assemblyName,”Add”,argus)

Summarization
AJAX is not a new technology, which is just combination of some technology existed. In my opinion, AJAX is to encapsulate XmlHttp called by JavaScript, which just change the ways to write the code.

Encode and Decode:
public static string Encode(string value)
  {
  byte[] bytes = ASCIIEncoding.ASCII.GetBytes(value);
  return Convert.ToBase64String(bytes);
  }
  public static string Dencode(string value)
  {
  byte[] bytes = Convert.FromBase64String(value);
  return ASCIIEncoding.ASCII.GetString(bytes);
  }

October 26, 2009

What does ASP.NET 3.5 Extensions bring to us?

Filed under: Developer tools and applications — Tags: , , , , — Jackson @ 9:32 pm

1. Overview

The release of the new technology .NET 3.5 and Visual Studio 2008 makes milestone contribution to the .NET strategy of Microsoft. In the Web development, it includes a powerful HTML Web designer which provides split-view editing, and the perfect CSS. Meanwhile, it makes its support to JavaScript better, including Intelligent hints and debug.

 

Microsoft issued the first preview version of ASP.NET 3.5 Extensions only 20 days after it released .NET 3.5. The final version is released in the first half of the year 2008, which contains more features of ASP.NET:

1. ASP.NET MVC Framework

2. Improvement of ASP.NET AJAX

3. ASP.NET Dynamic Data support 

4. ASP.NET Silverlight support

5. ADO.NET Data services

 

In this article, I will display some of the new features of ASP.NET 3.5 Extensions though several simple examples.

2. ASP.NET MVC framework

The concept of MVC has been raised for many years. It divides the application implementation into three parts: Model to maintain the data status, View to display the user interface, Controller to handle the user interaction, operate Model and select View to display the data. The first concern of ASP.NET MVC Framework is separation for testing more conveniently. Meanwhile, it uses aspx page, template page and user control as View and provides powerful URL Routing Engine. I will show these features by examples.

 

Step1: set up Model, use LINQ to SQL to establish a Product data model

 

 

 

Step2 set up View, display the detailed information of Pdoduct by using an aspx page which inherited from a Generic ViewPage

 

public partial class Product_Product : ViewPage<ProductInfo>
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
 

 

 

 

   show the data in aspx page, use <%=%> directly to label output 

<div>
<h2>ProductDetail:</h2>
ProductId

<%= ViewData.ProductId %><br /><br />
Name
<%= ViewData.Name %><br /><br />
Descn
<%= ViewData.Descn %>
</div>
 
 

 

 

Step3set up Controllerinherit from Controller base classand add Actionat the same time, use product view to realize the data function and input data object that needs to be displayed.

public class ProductController : Controller
{
[ControllerAction]
public void Index()
{
MSPetShopDataContext db = new MSPetShopDataContext();
ProductInfo productinfo = db.ProductInfos.Single(p => p.ProductId == “BD-03″);
RenderView(”Product”, productinfo);
}
}
 

 

 

 

Step4select Path for Configurationmake configurations Application_Start

 

void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Add(
new Route
{
Url = “[controller]/[action].mvc”,
Defaults = new { action = “Index”},
RouteHandler = typeof(MvcRouteHandler)
}
);
}
 
 

 

basicly, the proceedings are the four steps for setting up a application based on ASP.NET MVC Framework.

   


3. ASP.NET AJAX improvement
 
 

 

In the ASP.NET 3.5 Extensions, the most important improvement to ASP.NET AJAX is a better support to browser history that we can control the Back and Forward button more conveniently. It provides two ways for us to choose, using server-side control or Client-script. In the following, I will illustrate how to use server-side control to control the browser history.


       add ScriptManager Control
and set its EnableHistory attribute as truepermit the history management of browser and OnNavigate handled as OnNavigateHistory function for dealing with navigation event. At the same time, set the EnableStateHash attribute as false to make modifications easier to perform. In real situations, we can decide whether to perform the Hash encryption as required:

 

<asp:ScriptManager runat=”server” ID=”ScriptManager1″
OnNavigate=”OnNavigateHistory”
EnableHistory=”true”
EnableStateHash=”false” />

 

Create Browser history point at the time of clicking button with the way of AddHistoryPoint

 

 

public void ButtonClick(object sender, EventArgs e)
{
LabelHistoryData.Text = ((Button)sender).Text;
ScriptManager.GetCurrent(this).AddHistoryPoint(key, LabelHistoryData.Text);
} 

 

Navigation processing

public void OnNavigateHistory(object sender, HistoryEventArgs e)
{
LabelHistoryData.Text = Server.HtmlEncode(e.State[key]);
} 

 

For demonstrationthree button should be added on the page

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="Button2" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="Button3" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:Panel runat="server" CssClass="box" ID="Content" Height="40px">
Date and Time:
<%= DateTime.Now.ToLongTimeString() %>
<br />
Page's refresh state:
<asp:Label runat="server" ID="LabelHistoryData" />
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
<p />
<asp:Button runat="server" ID="Button1" Text="Key 1" OnClick="ButtonClick" />
<asp:Button runat="server" ID="Button2" Text="Key 2" OnClick="ButtonClick" />
<asp:Button runat="server" ID="Button3" Text="Key 3" OnClick="ButtonClick" /> 

 

  

In the preceding, I mainly use the server-side approach to realize the support to browser history in ASP.NET AJAX, you can also use client script to manage browser history.

 

 

 

 

 

 

August 31, 2009

Visual Web Developer Express vs Visual Studio 2008?

I am currently reading Beginning ASP.NET with C# and it recommended using Visual Web Developer Express(VWD).But ,I have a battery of questions.Could I use Visual Web Developer Express for all the projects I am planning to do in Visual Studio 2008?Can the Free Express edition satisfy my needs?Or, Is there a need to buy Visual Studio even though I have a VWD?Could you tell me What I can do or can not when I just use the Visual Web developer Express 2008?

If you read this ,do you still recommended me to use UWDE,or any reasons ?
However,I was just thinking about what the Express version lacks ,compared with the Visual Studio.

1.Not Extensibile with other add-ons or third party tools.If I use Visual Web Developer 2008 Express Edition ,I can’t install and use Web Application Projects ,CSS Properties Window,HTML/ASP.net Spell Spell Checker, ReSharper etc like the third party tools.
2.Can not add a Class Library project. If you want to add a Class Library project or a Web Controls Library project to the solution,to be surprised ( Class libraries are popular way to sharing business logic code or any other utility code. ),you can not manage it . Because VWD Express 2008 only supports a single type of project: Web site.Also,VWD 2008 SP1 allows Web Application and Class Library Projects in the solution.
3.Lack of Source Code Control,while a good Source Code Control system can provide us with change history ,branches ,merges ,etc.SCC is key for a professional developer in team development.
4. no Accessibility checker.It is indispensible for you to develop Web sites that must be accessible.
5.Lack of the ability for automatic generation of resources for localization.This means that your Web can not be localized in multiple languages.
6.You want to attach debugger to a process in VWD Express ,sorry you can’t.For example,when you need to step through code in existing classic ASP pages in order to understand how it works or you have to maintain classic ASP pages, you need ASP debugging which requires ability to attach debugger to a running process, the Visual Web Developer Express Edition can not help you .
7. No Native code debugging.For example ,some legacy code, especially in classic ASP code may be using COM objects written in C++. Mixed mode debugging is not supported in Express.
8.Not support opening or editing SharePoint Web sites.
So much you can not do ,maybe you will give up the free Express edition.You will find Visual Studio 2008 more favorable.

However,VWD Express 2008 still has its merits.
The obvious advantage of VWD over VS2008 is that it is free and if you can work smart with it given the missing features, it may be the more pragmatic option for you. If those are features that you can’t live without, VS2008 may be a wise investment - you also get all of the features missing from other Express products (Visual Basic 2008, Visual C# 2008, etc).

In addition,Visual Web Developer Express 2008 is a free web tool that allows you to build CSS, HTML ASP.NET, C#, VB, and JavaScript and supports additional frameworks like ASP.NET MVC, AJAX, Silverlight and jQuery.

So,what should I choose ?Or,I can have a cake and eat it too ?

Powered by WordPress

Close
E-mail It