.net学习之母版页执行顺序、jsonp跨域请求原理、IsPostBack原理、服务器端控件按钮Button点击时的过程、缓存、IHttpModule 过滤器
1.WebForm使用母版页后执行的顺序是先执行子页面中的Page_Load,再执行母版页中的Page_Load,请求是先生成母版页的控件树,然后将子页面生成的控件树填充到母版页中,最后输出
2.WebForm使用母版页进行登录时候的验证
- //新建一个页面父类
- public abstract class BasePage:Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- //1.身份验证的方法 Session
- if (Session["uinfo"] == null)
- {
- if (Request.Cookies["uinfo"] == null)
- {
- PageHelper.WriteJsMsg("您尚未登录~~~", "/Manage/View/Login.html");
- Response.End();
- }
- else
- {
- //如果Cookie中有用户id,则 根据id读取用户对象 存入 Session
- string strId = Request.Cookies["uinfo"].Value;
- //验证 strId 是否为 整型
- //验证成功则读取数据库 , 并将 用户对象 保存到Session
- Session["uinfo"] = new BLL.Users().GetModel(int.Parse(strId));
- //2.调用子类的 重写方法
- ChildPageLoad();
- }
- }
- }
- public abstract void ChildPageLoad();
- }
- //页面需要权限验证的都继承BasePage
- public partial class WebForm3 :BasePage
- {
- public override void ChildPageLoad()
- {
- throw new NotImplementedException();
- }
- }
3.jsonp跨域请求原理,就是使用script标签可以跨域,请求回来的字符串浏览器作为js代码进行执行
jQuery请求的代码:
- $.ajax("url",
- type:"get",
- dataType:"jsonp",
- jsonp:"callback",//发送服务器的回调函数名参数
- jsonpCallback:"callbackFun",//指定回调的函数名
- success:function(){
- alert("请求成功");
- }
- );
- function callbackFun(data){
- }
4.IsPostBack原理:
是否为表单提交,服务器端asp.net框架依靠检测请求报文中的_VIEWSTATE来设置值
5.服务器端控件按钮Button点击时的过程
第8个事件创建前台页面对象,11、12之间调用页面的ProccessRequest方法,打造页面控件树,调用PageLoad,处理非按
钮点击事件,处理按钮点击事件,Render生成html代码
浏览器端有按钮被点击的时候,会生成请求报文到服务器,被点击按钮的name会被传到服务器,服务器端asp.net框架会
根据这个name到控件树中找到对应的服务器控件,并执行它的事件,从而调用事件方法,但是,如果请求报文中包含多个
按钮名字,则服务器端只执行最后一个按钮的事件方法。
6.缓存
(1)ASP.NET 页面输出缓存
<%@ OutputCache Duration="30" VaryByParam="id;name"%>
<%--VaryByParam 必需属性,可以为 VaryByParam="none" 或 VaryByParam="*"
或指定参数,如 VaryByParam="PcacheTime",VaryByParam="PcacheTime;page"--%>
(2)自定义缓存
- protected void Page_Load(object sender, EventArgs e)
- {
- if (Cache["myDog"] != null)
- {
- string str = Cache["myDog"].ToString();
- Response.Write(str);
- }
- else
- {
- //1.设置永久 缓存数据
- // Cache["myDog"] = "我的小狗叫 花花 ~~~";
- //2.设置 相对过期时间为10秒的 缓存数据,如果一直有请求,就在当前的请求上重新推迟10秒
- //Cache.Add("myDog", "我的小狗叫 花花 ~~~", null, System.Web.Caching.Cache.NoAbsoluteExpiration,
- // new TimeSpan(0, 0, 10), System.Web.Caching.CacheItemPriority.Default, null);
- //3.设置 绝对过期时间为10秒后的 缓存数据,不管有没有一直请求,都是在创建10秒后过期
- //Cache.Add("myDog", "我的小狗叫 花花 ~~~", null, DateTime.Now.AddSeconds(10), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Default,OnRemoveCallback);
- //4.为 缓存项 添加 回调函数(当缓存被 销毁的时候 执行),带 【文件缓存依赖】
- //CacheDependency cd = new CacheDependency(Request.MapPath("/data.txt"));
- //Cache.Add("myDog", "我的小狗叫 花花 ~~~", cd, Cache.NoAbsoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Default, OnRemoveCallback);
- //5.缓存依赖数据库 具体代码参考 http://adyhpq.blog.163.com/blog/static/3866700201082624615851/
- SqlCacheDependency sqlDep = new SqlCacheDependency("LWord", "Users");
- IList<LeaveWordBorad.MODEL.Users> list = new LeaveWordBorad.BLL.Users().GetList();
- Cache.Add("myDog", list.Count, sqlDep, Cache.NoAbsoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Default, OnRemoveCallback);
- Response.Write("刚买了只狗~~~!");
- }
- }
- /// <summary>
- /// 缓存过期之后执行的函数
- /// </summary>
- /// <param name="key"></param>
- /// <param name="value"></param>
- /// <param name="reason"></param>
- private void OnRemoveCallback(string key, object value, System.Web.Caching.CacheItemRemovedReason reason)
- {
- string path = Server.MapPath("/log.txt");
- System.IO.File.AppendAllText(path, key + "=" + value + "reason=" + reason);
- }
7.IHttpModule 过滤器
- public class MyHttpModule:IHttpModule
- {
- //每次请求的时候都会调用该方法,可以在这里进行url重写
- public void Init(HttpApplication context)
- {
- context.BeginRequest += context_BeginRequest;
- }
- void context_BeginRequest(object sender, EventArgs e)
- {
- HttpContext context =( (HttpApplication) sender).Context;
- context.Response.Write("哈哈"+DateTime.Now);
- }
- public void Dispose()
- {
- }
- }
- Web.config
- <system.webServer>
- <modules>
- <add name="myHttpModule" type="WebApplication2.MyHttpModule"/>
- </modules>
- </system.webServer>
- Global文件:
- protected void Application_BeginRequest(object sender, EventArgs e)
- {
- //可以在这里进行url重写
- Response.Write("Application_BeginRequest哈哈");
- }
- protected void Application_BeginRequest(object sender, EventArgs e)
- {
- string requestUrl = Request.RawUrl;///WebForm1/8
- Response.Write(requestUrl);
- string[] strUrlParts = requestUrl.Split(new char[]{'/'},StringSplitOptions.RemoveEmptyEntries);
- if (strUrlParts.Count()>)
- {
- if (strUrlParts[].Equals("WebForm1", StringComparison.InvariantCultureIgnoreCase))
- {
- HttpContext.Current.RewritePath("/WebForm1.aspx?id=" + strUrlParts.Last());
- }
- }
- }
.net学习之母版页执行顺序、jsonp跨域请求原理、IsPostBack原理、服务器端控件按钮Button点击时的过程、缓存、IHttpModule 过滤器的更多相关文章
- Django学习---jsonp跨域请求
jsonp跨域请求 我们通过ajax进行跨域请求的时候,请求发送过去,但是在接受返回数据的时候浏览器会进行拦截. 这是由于浏览器存在同源策略机制,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源 ...
- JSONP(跨域请求) —— 一种非官方跨域数据交互协议
1.JSONP的作用 由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名.协议.端口)的资源,为 了实现跨域请求,可以通过script标签实现跨域请求,然后再服务器端输出JSON数 ...
- jQuery ajax的jsonp跨域请求
一直在听“跨域跨域”,但是什么是跨域呢?今天做了一些了解.(利用jQuery的jsonp) jQuery使用JSONP跨域 JSONP跨域是利用script脚本允许引用不同域下的js实现的,将回调方法 ...
- JSONP跨域请求数据报错 “Unexpected token :”的解决办法
原文 http://www.cnphp6.com/archives/65409 Jquery使用ajax方法实现jsonp跨域请求数据的时候报错 “Uncaught SyntaxError: Une ...
- jQuery jsonp跨域请求
跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的. 浏览器的同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互. 如果协议,端口和主机对于两个页面是相同的,则两个页面具 ...
- jsonp跨域请求响应结果处理函数(python)
接口测试跨域请求接口用的jsonp,需要将回调函数里的json字符串提取出来. jsonp跨域请求的响应结果格式: callback_functionname(json字符串). #coding:ut ...
- jQuery jsonp跨域请求详解
跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的. 浏览器的同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互. 如果协议,端口和主机对于两个页面是相同的,则两个页面具 ...
- 原生JavaScript封装的jsonp跨域请求
原生JavaScript封装的jsonp跨域请求 <!DOCTYPE html> <html lang="en"> <head> <met ...
- 关于sencha touch 的JSONP跨域请求的学习研究
此篇文章是对自己在研究学习sencha touch的过程中的点滴记录,主要是JSONP的跨域请求这方面,对于何为是跨域概念还有不熟悉的,可以自己问下度娘. 先上张图: 我要完成的功能就是表格下拉刷新, ...
随机推荐
- iOS设计中的“代理”
“代理”--在iOS的开发设计中是一个非常重要的概念,同时又是十分基础的知识.所以,掌握“代理”势在必行! 以下,结合一个具体的例子,详细认识“代理”: 1, 图例解释: ①:定义两个文本输入框UIT ...
- Android列表控件ListView详解
ListView绝对可以称得上是Android中最常用的控件之一,几乎所有应用程序都会用到它. 由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量的数据需要展示的时候 ...
- java File delete()执行失败原因
java.io.File里的delete操作很实用也很常用,可以用来删除单独的文件和某一目录.但有时候会出现delete失败的情况,出现这种情况的原因一般有以下几种: 1.删除时还有其他程序在使用该文 ...
- Linux CAT与ECHO命令详解 <<EOF EOF
Linux CAT与ECHO命令详解 cat命令是Linux下的一个文本输出命令,通常是用于观看某个文件的内容的: cat主要有三大功能: .一次显示整个文件. $ cat filename .从键盘 ...
- Oracle中创建MD5方法
create or replace function MD5(passwd in varchar2) return varchar2 is retval ); begin retval := utl_ ...
- java 调用webservice的各种方法总结
java 调用webservice的各种方法总结 几种流行的开源WebService框架Axis1,Axis2,Xfire,CXF,JWS比较 方法一:创建基于JAX-WS的webservice(包括 ...
- STL---deque(双端队列)
Deque是一种优化了的.对序列两端元素进行添加和删除操作的基本序列容器.它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用多个连续的存储块,并且在一个映射结 ...
- centos7删除已经安装的docker
centos下可以使用yum来删除docker. 列出docker包的具体的名字. $ yum list installed | grep docker docker-engine.x86_64 -0 ...
- MySQL排序原理与MySQL5.6案例分析【转】
本文来自:http://www.cnblogs.com/cchust/p/5304594.html,其中对于自己觉得是重点的加了标记,方便自己查阅.更多详细的说明可以看沃趣科技的文章说明. 前言 ...
- code vs 1506 传话
codevs 1506 传话(时间限制: 1 s 空间限制: 128000 KB) 题目描述 Description 一个朋友网络,如果a认识b,那么如果a第一次收到某个消息,那么会把这个消息传给b, ...