怎样学习webwinform三层架构构开发

详解MVC与WebForm的开发模式
1.传统WebForm开发中存在的一些问题,传统的开发中,微软的开发团队为开发者设计了一个在可视化设计器中拖放控件,编写代码响应事件的快速开发环境。然而,它所带来的负面效应是:
  由于控件封装了很多东西,开发者很难了解这背后的是如何运作的
  容易得到一个包含大量ViewState的页面,使得页面尺寸远远超过所需的内容,使得页面的打开速度较慢
  不容易被测试
  2.什么是MVC?
  MVC(,模型-视图-控制器模式)是工程中的一种软件架构模式。它把软件分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
  3.什么是ASP. MVC?
  ASP.NET MVC是微软的开发团队基于MVC开发的一个易于被测试的框架。它具有以下特性:
  没有数据回传
  没有在页面中保存视图状态
  开发者可以完全掌控页面的呈现过程
  易于单元测试
  易于测试驱动开发
  可扩展、可替换
  支持WebForm中的有关特性,如:用户控件、母版页、数据绑定、本地化等
  不在基于文件目录结构,而是将URL映射到控制器中
  4. 为什么使用ASP.NET MVC?
  易于进行单元测试
  易于进行测试驱动开发
  避免了WebForm中大量的ViewState导致页面文件变得臃肿
  5. MVC与三层架构?
  MVC是一种模式
  ASP.NET MVC是一个基于MVC模式的开发框架
  三层架构是一种架构
  至于区别,可以严格的从概念上区分开来。
  下图是MVC与三层架构的对应关系
关键词:& & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事/刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
你还可能关注…
本周热门内容已经到最后一张了!
GridView增删改查学习示例源码
价格: 免费
累计评价:
源码目录结构图
BusinessLogic
BusinessLogic.dll[5KB]
BusinessLogic.pdb[15KB]
CommonLayer.dll[5KB]
CommonLayer.pdb[13KB]
DBAccess.dll[5KB]
DBAccess.pdb[13KB]
BusinessLogic.csprojResolveAssemblyReference.cache[8KB]
BusinessLogic.dll[5KB]
BusinessLogic.pdb[15KB]
DesignTimeResolveAssemblyReferencesInput.cache[5KB]
ResolveAssemblyReference.cache[5KB]
Properties
CommonLayer
CommonLayer.dll[5KB]
CommonLayer.pdb[13KB]
CommonLayer.dll[5KB]
CommonLayer.pdb[13KB]
DesignTimeResolveAssemblyReferencesInput.cache[5KB]
Properties
DBAccess.dll[5KB]
DBAccess.pdb[13KB]
DBAccess.dll[5KB]
DBAccess.pdb[13KB]
DesignTimeResolveAssemblyReferencesInput.cache[5KB]
Properties
WebApplication_UserInterface
BusinessLogic.dll[5KB]
BusinessLogic.pdb[15KB]
CommonLayer.dll[5KB]
CommonLayer.pdb[13KB]
DBAccess.dll[5KB]
DBAccess.pdb[13KB]
WebApplication_UserInterface.dll[8KB]
WebApplication_UserInterface.pdb[39KB]
DesignTimeResolveAssemblyReferencesInput.cache[8KB]
ResolveAssemblyReference.cache[8KB]
WebApplication_UserInterface.csprojResolveAssemblyReference.cache[14KB]
WebApplication_UserInterface.dll[8KB]
WebApplication_UserInterface.pdb[39KB]
Properties
Site.Master[1KB]
WebApplication_UserInterface.csproj.user[1KB]
from.gif[4KB]
WebApplication_UserInterface.sln[2KB]
WebApplication_UserInterface.suo[50KB]
最新Asp.Net源码下载.url[123B]
GridView增删改查学习示例源码源码描述:该源码可以帮助用户学习GridView控件操作GridView控件进行增删改查的一些简单操作数据库脚本Product.sqlIn this Article you can learn how to edit, update, delete, and cancel in gridview.First drag and drop Gridview.In gridview properties set AutoGenarateColumns to False.Next open Default.aspx source code. To make a columns in Gridview use& &asp:TemplateField&Here first I created
责任编辑:霹雳贝贝
相关商业代码
同类下载排行
对您有用的代码
数据库应用
ASP.NET MVC安装组件
Windows Phone手机开发工具
Windows 云开发
常见技术问题您现在的位置: &
ASP.NET WebForm也可以这样用Ajax
ASP.NET WebForm也可以这样用Ajax
  对于 WebForm项目,进行Ajax操作大概有三种方式:web服务(.asmx文件),一般处理程序(.ashx)和一些Ajax控件。  对提供的ajax控件,暂且不说,只说另外两种方式,都需要引入额外的代码文件对Ajax进行操作(asmx和ashx,且web服务还要引入一个cs文件与之对应),假如要对Example.aspx这个页面添加一些自定义的Ajax操作,并且这些Ajax操作并不会在别的页面上用到,如此不得不引入额外的代码文件完成这个操作,假如这个Ajax操作很简单,只需要一个简单的函数就可以执行,那岂不是很麻烦的过程吗?如此一来,随着项目中 Ajax操作的增多,ashx和asmx文件都会随着时间的增长而增长,项目的维护也会随之加倍。为什么我们不能把Ajax操作的后台代码直接放在 Example.aspx对应的Example.aspx.cs文件里?如果能这样做,以上两种烦恼都会迎刃而解,不是吗?  于是,按照以上思路,实现了如下Ajax框架。先来看这个框架的实现机制:    上图是自己画的一个缩减版IIS接收到一个aspx请求的HttpApplication管线和 Page在执行ProcessRequest()方法中的页面生命周期的部分事件。Page本身是继承自IHttpHandler接口,IHttpHandler提供了一个重要的约束方法ProcessRequest,该方法是对接收到的信息(HttpContext)进行具体的处理同样,一般处理程序和web服务也实现了自己的IHttpHandler,并以此提供一些Ajax服务。具体的操作过程请自行查找MSDN。  原理是在页面生命周期开始的第一个事件PreInit进行一些处理,一旦发现劫持到的请求是一个ajax请求,那么利用C#的反射来调用aspx.cs中定义的方法,执行完方法之后,调用Response.End()方法,调用这个方法会直接跳到管线的EndRequest事件,从而结束请求,这样就无需走一些没有必要的页面生命周期的步骤,从而完成一个Ajax操作。如果发现是一个正常的操作,那么就走正常流程。  下面以一个简单例子说明该Ajax框架的使用:  1、添加一个解决方案  2、新建一个 Default.aspx 页面  3、在Default.aspx.cs页面中创建一个被调用的测试方法:  public&List&string&&&TestAjaxMethod(int&a,&string&b,&float&c) &&&&&&&&&{ &&&&&&&&&&&&&&&&return&new&List&string&&{&a.ToString(),&b,&c.ToString()&}; &&&&&&&&&}  4、在Default.aspx中写一个Ajax请求  PowerAjax.AsyncAjax(‘TestAjaxMethod’,&[1,&2,&"333","sss"],&function&(SucceessResponse)&{ &&&&&&&&&//&成功后的代码&});  PowerAjax.js是用Jquery专门为这个框架封装的一个及其简单的JS类库,这个类库中有两个主要的方法:PowerAjax.AsyncAjax和PowerAjax.SyncAjax,一个提供同步操作,一个提供异步操作,参数有三个:  第一个参数是即将操作在aspx.cs的Ajax方法的名字(用名字反射方法)。  第二个参数是一个以数组形式组成参数列表数据。  第三个参数是操作成功之后执行执行的回调方法,与c#中的委托一个道理。
  以下为这个简单JS库的代码:
var&PowerAjax&=&function&()&{&} &
PowerAjax.__Private&=&function&()&{&} &
//&进行异步操作 &
PowerAjax.AsyncAjax&=&function&(methodName,&paramArray,&success)&{ &
&&&&PowerAjax.__Private.Ajax(methodName,&paramArray,&success,&true); &
//&进行的是同步操作 &
PowerAjax.SyncAjax&=&function&(methodName,&paramArray,&success)&{ &
&&&&PowerAjax.__Private.Ajax(methodName,&paramArray,&success,&false); &
PowerAjax.__Private.Ajax&=&function&(methodName,&paramArray,&success,&isAsync)&{ &
&&&&var&data&=&{}; &
&&&&switch&(paramArray.length)&{ &
&&&&&&&&case&0: &
&&&&&&&&&&&&data&=&{&'isAjaxRequest':&true,&'MethodName':&methodName&}; &
&&&&&&&&&&&& &
&&&&&&&&case&1: &
&&&&&&&&&&&&data&=&{&'isAjaxRequest':&true,&'MethodName':&methodName,&"param0":&paramArray[0]&}; &
&&&&&&&&&&&& &
&&&&&&&&case&2: &
&&&&&&&&&&&&data&=&{&'isAjaxRequest':&true,&'MethodName':&methodName,&"param0":&paramArray[0],&"param1":&paramArray[1]&}; &
&&&&&&&&&&&& &
&&&&&&&&case&3: &
&&&&&&&&&&&&data&=&{&'isAjaxRequest':&true,&'MethodName':&methodName,&"param0":&paramArray[0],&"param1":&paramArray[1],&"param2":&paramArray[2]&}; &
&&&&&&&&&&&& &
&&&&&&&&case&4: &
&&&&&&&&&&&&data&=&{&'isAjaxRequest':&true,&'MethodName':&methodName,&"param0":&paramArray[0],&"param1":&paramArray[1],&"param2":&paramArray[2],&"param3":&paramArray[3]&}; &
&&&&&&&&&&&& &
&&&&&&&&case&5: &
&&&&&&&&&&&&data&=&{&'isAjaxRequest':&true,&'MethodName':&methodName,&"param0":&paramArray[0],&"param1":&paramArray[1],&"param2":&paramArray[2],&"param3":&paramArray[3],&"param4":&paramArray[4]&}; &
&&&&&&&&&&&& &
&&&&var&url&=&document.location. &
&&&&$.ajax({ &
&&&&&&&&type:&"post", &
&&&&&&&&url:&url, &
&&&&&&&&data:&data, &
&&&&&&&&async:&isAsync, &
&&&&&&&&datatype:&"json", &
&&&&&&&&contentType:&"application/x-www-form-&charset=UTF-8", &
&&&&&&&&success:&function&(response)&{ &
&&&&&&&&&&&&success(response); &
&&&&&&&&}, &
&&&&&&&&error:&function&(response)&{ &
&&&&&&&&&&&&if&(response.status&==&500)&{ &
&&&&&&&&&&&&&&&&var&errorMessage&=&response.responseT &
&&&&&&&&&&&&&&&&var&errorTitle&=&errorMessage.substring(errorMessage.indexOf("&title&")&+&7,&errorMessage.indexOf("&/title&")) &
&&&&&&&&&&&&&&&&throw&new&Error("服务器内部错误:"&+&errorTitle); &
&&&&&&&&&&&&} &
&&&&&&&&} &
  5、更改Default.aspx.cs的继承页面为AjaxBasePage
public&partial&class&_Default&:&AjaxBasePage  6、主要基类:AjaxBasePage类
  如下代码:
public&class&AjaxBasePage&:&System.Web.UI.Page &
&&&&///&&summary& &
&&&&///&是否是一个ajax请求。 &
&&&&///&&/summary& &
&&&&public&bool&IsAjaxRequest&{&&private&&} &
&&&&///&&summary& &
&&&&///&&如果是Ajax请求,劫持页面生命周期的PreInit的事件,直接返回Response &
&&&&///&&/summary& &
&&&&protected&override&void&OnPreInit(EventArgs&e) &
&&&&&&&&AjaxRequest&ajaxRequest&=&AjaxRequest.GetInstance(Request.Form); &
&&&&&&&&this.IsAjaxRequest&=&ajaxRequest.IsAjaxR &
&&&&&&&&if&(this.IsAjaxRequest) &
&&&&&&&&{ &
&&&&&&&&&&&&AjaxApplication&ajaxApplication&=&new&AjaxApplication(this,&ajaxRequest); &
&&&&&&&&&&&&ajaxApplication.EndRequest(); &
&&&&&&&&} &
&&&&&&&&else&
&&&&&&&&{ &
&&&&&&&&&&&&//&如果不是Ajax请求,继续执行页面生命周期的剩余事件 &
&&&&&&&&&&&&base.OnPreInit(e); &
&&&&&&&&} &
  该类重写了PreInit方法,判断请求是否是一个Ajax请求。通过AjaxRequest类接收并处理接收到的请求,提取出一些有效的数据,比如说是否是一个Ajax请求,方法的名字,参数列表(AjaxParameter类)。
  至于AjaxParameter类,内部用的数据结构其实是一个字典,并使用索引来提供对数据的方便访问,提供一个Count属性,方便获取参数的个数。
  如下代码:
public&class&AjaxParameter &
&&&&&&&&private&IDictionary&int,&string&&m_DictionaryParamsData&=&new&Dictionary&int,&string&(); &
&&&&&&&&///&&summary& &
&&&&&&&&///&返回参数的个数。 &
&&&&&&&&///&&/summary& &
&&&&&&&&public&int&Count &
&&&&&&&&{ &
&&&&&&&&&&&&get &
&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&return&this.m_DictionaryParamsData.C &
&&&&&&&&&&&&} &
&&&&&&&&} &
&&&&&&&&///&&summary& &
&&&&&&&&///&索引具体参数的值。 &
&&&&&&&&///&&/summary& &
&&&&&&&&///&&param&name="index"&&/param& &
&&&&&&&&///&&returns&&/returns& &
&&&&&&&&public&string&this[int&index] &
&&&&&&&&{ &
&&&&&&&&&&&&get &
&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&if&(index&&=&5&||&index&&&0) &
&&&&&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&&&&&throw&new&NotSupportedException("请求方法的参数的个数限制为:0-5"); &
&&&&&&&&&&&&&&&&} &
&&&&&&&&&&&&&&&&return&this.m_DictionaryParamsData[index]; &
&&&&&&&&&&&&} &
&&&&&&&&} &
&&&&&&&&public&AjaxParameter(IDictionary&int,&string&&paramsData) &
&&&&&&&&{ &
&&&&&&&&&&&&this.m_DictionaryParamsData&=&paramsD &
&&&&&&&&} &
&&&&}  AjaxRequest类的设计思路其实是模仿HttpContext设计,HttpContext能够从基础的http请求报文分析出以后处理将要用到的数据(response,request,session,cookie等等)数据,而AjaxRequest通过分析Ajax的Post请求的数据域 Data分析出各种以后会用到的数据。如下是该类的代码:
public&class&AjaxRequest &
&&&&&&&&private&Dictionary&int,&string&&m_DictionaryParamsData&=&new&Dictionary&int,&string&(); &
&&&&&&&&private&AjaxParameter&m_AjaxP &
&&&&&&&&private&int&m_Count&=&0; &
&&&&&&&&#region&属性 &
&&&&&&&&///&&summary& &
&&&&&&&&///&是否是一个Ajax请求。 &
&&&&&&&&///&&/summary& &
&&&&&&&&public&bool&IsAjaxRequest&{&&private&&} &
&&&&&&&&///&&summary& &
&&&&&&&&///&请求的方法名字。 &
&&&&&&&&///&&/summary& &
&&&&&&&&public&string&MethodName&{&&private&&} &
&&&&&&&&///&&summary& &
&&&&&&&&///&参数数据。 &
&&&&&&&&///&&/summary& &
&&&&&&&&public&AjaxParameter&Parameters &
&&&&&&&&{ &
&&&&&&&&&&&&get&{&return&this.m_AjaxP&} &
&&&&&&&&} &
&&&&&&&&#endregion &
&&&&&&&&#region&构造函数 &
&&&&&&&&private&AjaxRequest(NameValueCollection&nameValueCollection) &
&&&&&&&&{ &
&&&&&&&&&&&&this.IsAjaxRequest&=&nameValueCollection["isAjaxRequest"]&==&"true"; &
&&&&&&&&&&&&if&(this.IsAjaxRequest) &
&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&this.MethodName&=&nameValueCollection["MethodName"]; &
&&&&&&&&&&&&&&&&foreach&(string&value&in&nameValueCollection) &
&&&&&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&&&&&string&formKey&=&string.Format("param{0}",&this.m_Count); &
&&&&&&&&&&&&&&&&&&&&if&(nameValueCollection[formKey]&!=&null) &
&&&&&&&&&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&&&&&&&&&this.m_DictionaryParamsData.Add(this.m_Count,&nameValueCollection[formKey]); &
&&&&&&&&&&&&&&&&&&&&&&&&this.m_Count++; &
&&&&&&&&&&&&&&&&&&&&} &
&&&&&&&&&&&&&&&&} &
&&&&&&&&&&&&&&&&m_AjaxParameter&=&new&AjaxParameter(this.m_DictionaryParamsData); &
&&&&&&&&&&&&} &
&&&&&&&&} &
&&&&&&&&#endregion &
&&&&&&&&#region&实例方法 &
&&&&&&&&public&static&AjaxRequest&GetInstance(NameValueCollection&nameValueCollection) &
&&&&&&&&{ &
&&&&&&&&&&&&return&new&AjaxRequest(nameValueCollection); &
&&&&&&&&} &
&&&&&&&&#endregion &
&&&&&&&&#region&ToString &
&&&&&&&&public&override&string&ToString() &
&&&&&&&&{ &
&&&&&&&&&&&&return&this.MethodN &
&&&&&&&&} &
&&&&&&&&#endregion &
  通过分析AjaxRequest的属性IsAjaxRequest可判断是否为Ajax请求,若该请求为一个Ajax请求,那么创建一个AjaxApplication实例,在创建AjaxApplication实例的过程中会利用当前页面和AjaxRequest提供的数据进行实际方法的调用(反射),该类是执行Ajax方法的核心类,其中会判断是否读取的到的方法是一个有效的方法,并判断从JS中AjaxApplication传入的参数类型的有效性,目前只提供对以下13中参数提供支持,如下:
(String、Boolean、Int32、Int64、UInt32、UInt64、Single、Double、Decimal、DateTime、DateTimeOffset、TimeSpan、Guid)  如果方法中出现非以上类型,将会抛出异常。为了方便Ajax的调试,在JS前段类库中我会对异常进行处理,并抛出Error,Error信息有效的截取了继承自Exception的抛出信息,至于如何获得更加详细的JS调试信息,以后JS库中可能会做提供更加详细的调用信息,毕竟框架是在改进中进行的。如下是AjaxApplication类的具体代码:
public&class&AjaxApplication &
&&&&&&&&private&AjaxBasePage&m_AjaxBaseP &
&&&&&&&&private&object&m_ResponseD &
&&&&&&&&public&AjaxApplication(AjaxBasePage&ajaxBasePage,&AjaxRequest&ajaxRequest) &
&&&&&&&&{ &
&&&&&&&&&&&&this.m_AjaxBasePage&=&ajaxBaseP &
&&&&&&&&&&&&Type&ajaxBasePageType&=&ajaxBasePage.GetType(); &
&&&&&&&&&&&&MethodInfo&methodInfo&=&ajaxBasePageType.GetMethods(BindingFlags.Public&|&BindingFlags.NonPublic&|&BindingFlags.Static&|&BindingFlags.Instance) &
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.FirstOrDefault(item&=&&item.Name&==&ajaxRequest.MethodName); &
&&&&&&&&&&&&object[]&parameterData&=&this.GetParameterData(ajaxRequest,&methodInfo); &
&&&&&&&&&&&&if&(methodInfo.IsStatic) &
&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&this.m_ResponseData&=&methodInfo.Invoke(null,&parameterData); &
&&&&&&&&&&&&} &
&&&&&&&&&&&&else&
&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&this.m_ResponseData&=&methodInfo.Invoke(ajaxBasePage,&parameterData); &
&&&&&&&&&&&&} &
&&&&&&&&} &
&&&&&&&&///&&summary& &
&&&&&&&&///&获取参数数据。 &
&&&&&&&&///&&/summary& &
&&&&&&&&private&object[]&GetParameterData(AjaxRequest&ajaxRequest,&MethodInfo&methodInfo) &
&&&&&&&&{ &
&&&&&&&&&&&&if&(methodInfo&!=&null) &
&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&ParameterInfo[]&parameterInfos&=&methodInfo.GetParameters(); &
&&&&&&&&&&&&&&&&if&(parameterInfos.Length&&&5) &
&&&&&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&&&&&throw&new&NotSupportedException("最多支持5个参数"); &
&&&&&&&&&&&&&&&&} &
&&&&&&&&&&&&&&&&if&(parameterInfos.Length&&&ajaxRequest.Parameters.Count) &
&&&&&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&&&&&throw&new&ArgumentException("缺少参数!"); &
&&&&&&&&&&&&&&&&} &
&&&&&&&&&&&&&&&&List&object&&parameterData&=&new&List&object&(parameterInfos.Length); &
&&&&&&&&&&&&&&&&for&(int&i&=&0;&i&&&parameterInfos.L&i++) &
&&&&&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&&&&&ParameterInfo&parameterInfo&=&parameterInfos[i]; &
&&&&&&&&&&&&&&&&&&&&string&paramValue&=&ajaxRequest.Parameters[i]; &
&&&&&&&&&&&&&&&&&&&&try&
&&&&&&&&&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&&&&&&&&&parameterData.Add(ParseAjaxParameter(paramValue,&parameterInfo)); &
&&&&&&&&&&&&&&&&&&&&} &
&&&&&&&&&&&&&&&&&&&&catch&(FormatException) &
&&&&&&&&&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&&&&&&&&&string&format&=&string.Format("传入静态方法&{0}&的第&{1}&个(从0开始计数)参数类型不匹配,应该为&{2}&类型&请检查!",&methodInfo.Name,&i,&parameterInfo.ParameterType.Name); &
&&&&&&&&&&&&&&&&&&&&&&&&throw&new&FormatException(format); &
&&&&&&&&&&&&&&&&&&&&} &
&&&&&&&&&&&&&&&&} &
&&&&&&&&&&&&&&&&return&parameterData.ToArray(); &
&&&&&&&&&&&&} &
&&&&&&&&&&&&else&
&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&throw&new&InvalidOperationException("没有发现此方法,请检查该方法签名(方法必须为public)"); &
&&&&&&&&&&&&} &
&&&&&&&&} &
&&&&&&&&///&&summary& &
&&&&&&&&///&类型转换。支持&String、Boolean、Int32、Int64、UInt32、UInt64、Single、Double、Decimal、DateTime、DateTimeOffset、TimeSpan、Guid &
&&&&&&&&///&&/summary& &
&&&&&&&&private&object&ParseAjaxParameter(string&ajaxParameterValue,&ParameterInfo&parameterInfo) &
&&&&&&&&{ &
&&&&&&&&&&&&object& &
&&&&&&&&&&&&if&(parameterInfo.ParameterType&==&typeof(String)) &
&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&obj&=&ajaxParameterV &
&&&&&&&&&&&&} &
&&&&&&&&&&&&else&if&(parameterInfo.ParameterType&==&typeof(Boolean)) &
&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&obj&=&bool.Parse(ajaxParameterValue); &
&&&&&&&&&&&&} &
&&&&&&&&&&&&else&if&(parameterInfo.ParameterType&==&typeof(Int32)) &
&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&obj&=&Int32.Parse(ajaxParameterValue); &
&&&&&&&&&&&&} &
&&&&&&&&&&&&else&if&(parameterInfo.ParameterType&==&typeof(UInt32)) &
&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&obj&=&UInt32.Parse(ajaxParameterValue); &
&&&&&&&&&&&&} &
&&&&&&&&&&&&else&if&(parameterInfo.ParameterType&==&typeof(UInt64)) &
&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&obj&=&UInt64.Parse(ajaxParameterValue); &
&&&&&&&&&&&&} &
&&&&&&&&&&&&else&if&(parameterInfo.ParameterType&==&typeof(Single)) &
&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&obj&=&Single.Parse(ajaxParameterValue); &
&&&&&&&&&&&&} &
&&&&&&&&&&&&else&if&(parameterInfo.ParameterType&==&typeof(Double)) &
&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&obj&=&Double.Parse(ajaxParameterValue); &
&&&&&&&&&&&&} &
&&&&&&&&&&&&else&if&(parameterInfo.ParameterType&==&typeof(Decimal)) &
&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&obj&=&Decimal.Parse(ajaxParameterValue); &
&&&&&&&&&&&&} &
&&&&&&&&&&&&else&if&(parameterInfo.ParameterType&==&typeof(DateTime)) &
&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&obj&=&DateTime.Parse(ajaxParameterValue); &
&&&&&&&&&&&&} &
&&&&&&&&&&&&else&if&(parameterInfo.ParameterType&==&typeof(DateTimeOffset)) &
&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&obj&=&DateTimeOffset.Parse(ajaxParameterValue); &
&&&&&&&&&&&&} &
&&&&&&&&&&&&else&if&(parameterInfo.ParameterType&==&typeof(TimeSpan)) &
&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&obj&=&TimeSpan.Parse(ajaxParameterValue); &
&&&&&&&&&&&&} &
&&&&&&&&&&&&else&if&(parameterInfo.ParameterType&==&typeof(Guid)) &
&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&obj&=&Guid.Parse(ajaxParameterValue); &
&&&&&&&&&&&&} &
&&&&&&&&&&&&else&
&&&&&&&&&&&&{ &
&&&&&&&&&&&&&&&&throw&new&NotSupportedException("方法参数类型不支持!"); &
&&&&&&&&&&&&} &
&&&&&&&&&&&&return& &
&&&&&&&&} &
&&&&&&&&///&&summary& &
&&&&&&&&///&结束页面生命周期,同时直接执行应用程序生命周期的EndRequest事件。 &
&&&&&&&&///&&/summary& &
&&&&&&&&public&void&EndRequest() &
&&&&&&&&{ &
&&&&&&&&&&&&HttpResponse&response&=&this.m_AjaxBasePage.Page.R &
&&&&&&&&&&&&response.ContentType&=&"application/json"; &
&&&&&&&&&&&&response.Clear(); &
&&&&&&&&&&&&JavaScriptSerializer&jsonSerializer2&=&new&JavaScriptSerializer(); &
&&&&&&&&&&&&response.Write(jsonSerializer2.Serialize(new&JsonResponse&{&IsSuccess&=&true,&Message&=&"处理成功",&ResponseData&=&this.m_ResponseData&})); &
&&&&&&&&&&&&response.End(); &
&&&&&&&&} &
  当初始化了一个AjaxApplication实例后,可以调用该实例的EndRequest()方法,来结束Ajax请求。该方法内部最后调用Response.End()方法来结束页面生命周期和大部分管线事件。
  并用JsonResponse类来封装返回数据。
public&class&JsonResponse &
&&&&public&bool&IsSuccess&{&&&} &
&&&&public&string&Message&{&&&} &
&&&&public&object&ResponseData&{&&&} &
  该类最后一个参数即承载了调用方法的返回值,为一个Object类型,也就是说,框架可以支持任何类型的返回值,当然该类型可以被序列化。
  7、回过头来再看Ajax请求,针对返回值可以这样用:
PowerAjax.AsyncAjax('TestAjaxMethod',&[1,&2,&"333",&"sss"],&function&(SucceessResponse)&{ &
&&&&if&(SucceessResponse.IsSuceess)&{ &
&&&&&&&&alert("恭喜,该ajax方法调用成功!"); &
&&&&&&&&Process(SucceessResponse.ResponseData);&//&处理返回的数据,这里可能需要你自己实现了,因为我无法判断你要返回的是什么东西,这是个Object &
&&&&}&else&{ &
&&&&&&&&alert("这是操作错误奥,不是内部异常,内部异常的抛出会我内部会处理的!"); &
&&&&&&&&alert("错误信息:"&+&SucceessResponse.Message); &
  以上是试水的东西,希望各位大牛指正。
&&&主编推荐
&&&热门试卷
&&&最新视频
&&&热门阅读
&&&最新问答
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&湘教QS2-164&&增值电信业务经营许可证湘B2-

我要回帖

更多关于 三层架构 的文章

 

随机推荐