.net学习之母版页执行顺序、jsonp跨域请求原理、IsPostBack原理、服务器端控件按钮Button点击时的过程、缓存、IHttpModule 过滤器

时间:2022-09-06 16:49:38

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 过滤器的更多相关文章

  1. Django学习---jsonp跨域请求

    jsonp跨域请求 我们通过ajax进行跨域请求的时候,请求发送过去,但是在接受返回数据的时候浏览器会进行拦截. 这是由于浏览器存在同源策略机制,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源 ...

  2. JSONP&lpar;跨域请求&rpar; —— 一种非官方跨域数据交互协议

    1.JSONP的作用 由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名.协议.端口)的资源,为 了实现跨域请求,可以通过script标签实现跨域请求,然后再服务器端输出JSON数 ...

  3. jQuery ajax的jsonp跨域请求

    一直在听“跨域跨域”,但是什么是跨域呢?今天做了一些了解.(利用jQuery的jsonp) jQuery使用JSONP跨域 JSONP跨域是利用script脚本允许引用不同域下的js实现的,将回调方法 ...

  4. JSONP跨域请求数据报错 &OpenCurlyDoubleQuote;Unexpected token &colon;”的解决办法

    原文  http://www.cnphp6.com/archives/65409 Jquery使用ajax方法实现jsonp跨域请求数据的时候报错 “Uncaught SyntaxError: Une ...

  5. jQuery jsonp跨域请求

    跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的. 浏览器的同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互. 如果协议,端口和主机对于两个页面是相同的,则两个页面具 ...

  6. jsonp跨域请求响应结果处理函数&lpar;python&rpar;

    接口测试跨域请求接口用的jsonp,需要将回调函数里的json字符串提取出来. jsonp跨域请求的响应结果格式: callback_functionname(json字符串). #coding:ut ...

  7. jQuery jsonp跨域请求详解

    跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的. 浏览器的同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互. 如果协议,端口和主机对于两个页面是相同的,则两个页面具 ...

  8. 原生JavaScript封装的jsonp跨域请求

    原生JavaScript封装的jsonp跨域请求 <!DOCTYPE html> <html lang="en"> <head> <met ...

  9. 关于sencha touch 的JSONP跨域请求的学习研究

    此篇文章是对自己在研究学习sencha touch的过程中的点滴记录,主要是JSONP的跨域请求这方面,对于何为是跨域概念还有不熟悉的,可以自己问下度娘. 先上张图: 我要完成的功能就是表格下拉刷新, ...

随机推荐

  1. T-SQL字符串相加之后被截断的那点事

    本文出处:http://www.cnblogs.com/wy123/p/6217772.html 字符串自身相加, 虽然赋值给了varchar(max)类型的变量,在某些特殊情况下仍然会被“截断”,这 ...

  2. CentOS操作记录

    基本操作记录 1.centos已经进到图形界面后怎么打开命令行:ctrl+alt+F3 得到如下命令界面 用用户名和密码登录 切换回图形界面时输入的命令:ctrl+alt+F1 2.重新启动系统:#r ...

  3. Java基础-包名和文件夹名字必须对应

    .java文件夹中的包名必须与物理文件夹的对应. 如果修改包名或者文件夹名,双方都需要同时更新.

  4. SQL SERVER 2014 安装图解(含 SQL SERVER 2014 安装程序共享)

    开篇介绍 2015年1月1日,新的一年开始之际,本来应该好好做点有意义的事情来跨个年的.结果,*惯 - 睡觉之前一定要折腾一下电脑,说干就干,给新到的 DELL 电脑装虚机,下载 SQL SERVE ...

  5. Flex 远程加载crossdomain&period;xml 解决

    局域网部署Flex项目的时候加载不出来,分析了一下http发现在请求连接“http://fpdownload.adobe.com/pub/swz/crossdomain.xml”,这里出了问题,跨域的 ...

  6. IT男的”幸福”生活&quot&semi;续1

    IT男的”幸福”生活"续1 我和LL开始下步追妹计划...... 知彼知已,方能把握机会.没想到孙子兵法太给力了,据LL了解,MM(她)是湖北人,找对象一般不会考虑外省的.高度165左右,相 ...

  7. js&colon;语言精髓笔记6----作用域

    js基础语法:由语句.表达式和变量构成:   语句是主要表达方式:单语句->复合语句(代码块)->程序片段(函数):js中没有单元和程序的概念: 作用域: 语法作用域与变量作用域的区别:前 ...

  8. SQL Server 中的存储过程

    一:初步了解存储过程的使用 创建一个简单的存储过程 CREATE PROC spEmployee AS SELECT * FROM HumanResources.Employee; 执行这个存储过程: ...

  9. ajax开发框架和XMLhttpRequest、responseText、responseXml和JSON的应用

    1 AJAX开发框架 2 A 初始化XMLHttpRequest对象 3 B指定响应处理函数 4 C发出HTTP请求 5 D处理服务器返回的信息 6 数据格式提要 6 优点 6 缺点 7 解析 JSO ...

  10. Python初学——多进程Multiprocessing

    1.1 什么是 Multiprocessing 多线程在同一时间只能处理一个任务. 可把任务平均分配给每个核,而每个核具有自己的运算空间. 1.2 添加进程 Process 与线程类似,如下所示,但是 ...