website与webApplication:
Web application有namespace,WebSite没有namespace;
WebApplication编译为一个assembly(所有cs文件编译为一个dll,所有aspx文件编译为一个dll。cs文件的dll在根目录有一份,运行时在c盘临时目录有一份使用)。 website每个aspx和aspx.cs文件都编译为一个assembly(即每个dll中都包含了一个aspx和aspx.cs页面内容;也即:每个页面都对应一个dll,这个dll包含了该页面的aspx和aspx.cs,跟其他页面无关)。所以website可以随时刷新看效果。
一般处理程序----直接实现IHttpHandler的类----(比aspx页面类更高级,应该达到了Page类这个级别)
Ashx是一般处理程序。对应于web程序的“请求”—“处理”—“响应”中的处理部分。其中ProcessAccess()方法就是asp.net页面生命中“处理”这一步所执行的工作。 推理得出:aspx页面实际上是网页模板,该页面的类继承自Page类,Page类实现了IHttpHandler接口,故页面的类由于继承了Page所以不用像ashx那样完全自己处理好多事情,Page类已经帮aspx页面类解决了很多操作,aspx页面类实现了处理客户端请求,并使用和修改.aspx这个模版反馈给客户端。
小技巧,多行字符串作一行:
在asp.net中,字符串是不可以分多行写的。如果有个多行文本字符串,可以前面加个@符号,这样就可以多行写了。
Asp.net最核心原理就是:请求--处理--响应 模型。
用户请求页面(看起来是请求了一个模版页aspx,其实是访问运行一个页面类的实例),页面类(aspx所对应的cs文件)及其父类所有方法编译好的dll,会对应于这次请求做出处理。 根据他里面针对这个aspx页面已写好的方法处理这个用户请求的页面的模版,把模版中的内容处理好之后,把处理完成的html模版连同其他http报文响应给客户浏览器。
用户看到页面后可能会填写其中的表单,填完后点击提交提交给服务器某个页面,这时Request报文中会包含表单的data信息。服务器又会对这次页面请求做出处理,按照程序猿写好的逻辑处理请求,尤其是处理Request里表单内容,然后把处理结果按照规定处理好模版页,将模版页返回给用户浏览器。
因此,用户看到的aspx页面都是由服务器动态生成在用户浏览器中重绘的。
Page类,页面类的结构:
Asp.net中页面类继承自Page类,Page类实现了IHttpHandler接口。 所以说页面类和ashx其实本质上都是实现了IHttpHandeler接口的一个处理程序。 只是aspx中Page父类帮我们的类做了很多事情。
客户端每次的页面请求,服务器都会new一个aspx页面类对象,该对象对这次请求进行处理。响应完毕后扔掉这个对象。客户端再次请求时候,服务器再次实例化页面类。
所以,在aspx页面类中定义的局部变量的值在一次页面生命周期中发生变化后不会继续保留,因为每次新请求该页面类都会重新实例化,变量也会重新初始化。
若想让页面类中的变量在所有请求时的变化都保持保存,那么需要把他声明为static静态变量(会放在内存静态存储区,直到服务器停止服务,即该动态网页程序退出了内存,静态存储区也销毁。session其实就是服务器上的静态变量/对象)。
关于表单项能否被提交或提交后的值:
当不提交表单时候表单项目字段值为空null,即:只要不发生Get或者Post,则服务器接收不到表单字段的值,只要发生get或者post,表单项的值就不是null了,即使不填写也会变成””空字符串。
另外,只有带name属性的表单项才能被提交到服务器,否则服务器直接接收不到表单项。