VISION:
后台使用c#编写服务端(=codebehind)
前台使用js+ajax交互。
取消viewstate功能。
handler本质上是无状态的,因此每次都需要传入数据。 现在就要换一种开发思路。
-------------------------------------------------------------------
http://www.cnblogs.com/artech/archive/2007/04/06/702658.html
浅谈ASP.NET的Postback
点击一个button的postback:
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTA0NDQ2OTE5OWRk281L4eAk7iZT10hzg+BeOyoUWBQ=" />
Server端通过__EVENTTARGET这个hidden field的值找到对应的Server端的Control
那么调用Page的RaisePostBackEvent方法
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
protected virtual void RaisePostBackEvent(IPostBackEventHandler sourceControl, string eventArgument)
{
sourceControl.RaisePostBackEvent(eventArgument);
}
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
{
base.ValidateEvent(this.UniqueID, eventArgument);
if (this.CausesValidation)
{
this.Page.Validate(this.ValidationGroup);
}
this.OnClick(EventArgs.Empty);
this.OnCommand(new CommandEventArgs(this.CommandName, this.CommandArgument));
}
这篇文章,大概知道,通过hiddenfield + input,服务器反射获取对象,然后指定接口触发调用。问题就在于,是否一个httpHandler反射对象然后加载? 还是有很多个?
http://www.cnblogs.com/artech/archive/2007/05/21/753620.html
深入剖析ASP.NET的编译原理之一:动态编译(Dynamical Compilation)
asp.net里面一个page1。动态编译为:
Page1和Page2的编译后的Type name变成了part_i_page1_aspx& Page1和part_i_page2_aspx& Page2
在part_i_page1_aspx中定义了一个基于aspx的HttpHandler所需的所有操作,并且它继承了Page1。
对Part I/Page1的Http Request,ASP.NET所要做的就是生成一个part_i_page1_aspx来Handle这个request就可以了。
还有一个FastObjectFactory, 高效的生成对象。而生成的是什么样的对象呢?实际上就是基于每个aspx的Http request的Http handler,对于Part I/Page1就是我们上面一节分析的part_i_page1_aspx对象。
一个页面,会对应一个handler,这个handler包含了页面的所有对象(textbox....) ,而且这些对象是动态生成的。被反射调用。
现在我们来总结整个动态编译的过程:
Step1:当ASP.NET收到对于某个Page的Request,根据这个request对应的Url试着找到该page对应的Preservation File,如果没有找到,重新编译Page所在目录下的所有需要编译的文件,同时生成一些额外的文件,包括Preservation File。
Step2:然后解析这个Preservation File,通过hash和filehash判断文件自身或者是Dependent File是否在上一次编译之后进行过任何的修改,如果是的,则重新编译。然后重新执行Step2。
Step3:通过Preservation File 的assembly attribute Load对应的assembly(如果Assembly还没有被Load的话),通过type获知对应的aspx type,然后借助FastObjectFactory的对应的Create_ASP_XXX创建这个type。这个新创建的对象就是我们需要的Http Handler,在之上执行相应的操作把结果Response到客户端。
-------------------------------------------------------------------
http://www.theserverside.net/tt/articles/showarticle.tss?id=IIS_ASP
IIS communicates with the .NET framework through unmanaged ISAPI extensions: aspnet_isapi.dll and aspnet_filter.dll.
along with the state Windows service (aspnet_state.exe) and the ASP.NET worker process (aspnet_wp.exe) are the core of the ASP.NET processing model.
<add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory"/>
Implementing IHttpHandlerFactory
Where HTTP handlers may be useful in responding to requests for specific resources, a handler factory makes it possible to intercept a request, perform some pre-processing on the request, and then following a factory pattern, create the handler for the resource.
-----------------------------------------------------------------------
http://msdn.microsoft.com/en-us/library/ms972976.aspx
Understanding ASP.NET View State
View state's purpose in life is simple: it's there to persist state across postbacks.
-----------------------------------------------------------------------
ASP.NET MVC 入门:
http://www.cnblogs.com/qleelulu/archive/2008/10/05/1303997.html
/Views/{Controller}/{Action}.aspx
asp.net mvc 的页面实际上是一些<%% > 进行模板解析。
Q:在mvc中,如何才持久数据?例如在后台获取某个txtbox的text?
理论上是无法获取的。因为是无状态的,除非请求主动发送。
-----------------------------------------------------------------------
http://www.cnblogs.com/jmtek/archive/2006/02/16/331961.html
ASP.NET运行模式:PageHandlerFactory
JS框架如何和服务器交互?
------------------------------------
http://www.pin5i.com/showtopic-20894.html
ExtJS 中使用Asp.net编写后台服务器程序的几种方式
1. wcf
2. 写一个aspx,在page_load里面对request的string进行switchcase
3. 继承httphandler, 反射method进行操作。
http://tech.it168.com/a2010/0106/833/000000833411.shtml
现有的Ajax从框架角度分级的话,可以有以下分类:
·零级,完成base工作,包括扩展原有对象的方法,Ajax通讯部分,比较精简。
·一级,完成effect工作,包括增加常用效果转换函数,如tween、drag、maskLayer、fade等的特效。
· 二级,完成component工作,包括对话框、列表、树、日历等的组件。
·三级,完成application工作,包括完整的前端平台,允许用户定义能实现一定功能的模块。
一些框架只做零级,如Prototype.js,一些框架做到一级,如jQuery ,一些框架做到了三级,如Asp.net Ajax 和EXT。
选择合适的Ajax框架能提升程序效率,减少开发工作量,优化显示效果等作用。
---------------------------------------
理想中的开发框架:
1. 使用js实现智能参数回传(js+hidden input + 反射方法体需要的对象id生成回调传入参数)
private void onclick()
{
string username = Postback["id"] ; // 这里得知控件id,然后生成html页面的时候动态生成js进行智能回调,实现高性能viewstate
}
2. 使用asp.net / c#作为服务端技术。
不使用asp.net的项目,版本维护、代码关联很困难。直接使用类库进行服务端编写。因此需要实现factory。
asp.net 指定了assembly, classname
客户端返回请求 Action.aspx, 映射成为metod.
3.