zoukankan      html  css  js  c++  java
  • MagicAjax-NoStore,Session,Cache模式的区别

    NoStore:可用在NET1.1和2.0。
    Session和Cache:只能用在NET1.1,并且只能是InProc

    NoStore:不会保存控件的服务器资源
    Session和Cache:保存控件在服务器端,他们几乎是一样的只是存储的地方不同而已

    NoStore:控件的Load, Unload 事件会被触发
    Session和Cache:控件的Init, Load, PreRender, Unload事件不会被触发,但会触发AjaxCall, PreWriteScript和AjaxCallEnd,只要在类里面实现以下接口IAjaxCallEventHandler, IPreWriteScriptEventHandler即可

    一下是一个例子:在AjaxPanel里面有一个Button,点击Button增加一个新的HyperLink放到panel里面。

    private void Button1_Click(object sender, System.EventArgs e)
    {
        HyperLink link 
    = new HyperLink();
        link.Text 
    = "HyperLink" + AjaxPanel1.Controls.Count;
        AjaxPanel1.Controls.Add (link);
    }

    NoStore:新增的HyperLink只会添加一次(不符要求)
    Session和Cache:工作正常

    出现这种情况的原因就是:NoStore不会保存控件的资源,新增的HyperLink不会被保存,无论多少次ajax请求,AjaxPanel都是第一次请求时的状态。

    在NoStore模式下要解决这种情况,必须手工保存新创建的控件,然后页面请求时再次创建,代码如下:
    protected ArrayList links;

    private void Page_Load(object sender, System.EventArgs e)
    {
        links 
    = Session["links"as ArrayList;
        
    if (links == null)
        {
            links 
    = new ArrayList();
            Session[
    "links"= links;
        }
        AddLink();
    }

    private void Button1_Click(object sender, System.EventArgs e)
    {
        HyperLink link 
    = new HyperLink();
        links.Add(link);
        link.Text 
    = "HyperLink" + AjaxPanel1.Controls.Count;
        AjaxPanel1.Controls.Add (link);
    }

    private void AddLink()
    {
        
    foreach (HyperLink link in links)
        {
            AjaxPanel1.Controls.Add(link);
        }
    }
  • 相关阅读:
    Vue 组件4 动态组件
    Vue 组件3 作用域插槽
    Vue 组件 非父子组件通信
    vue 组件1
    单例模式--反射--防止序列化破坏单例模式
    遇到构造器中有多个可选参数时要考虑用构建器
    考虑用静态工厂方法代替构造器的场景
    转载--技术人员的发展之路
    一道lambda表达式题目
    想法跟实践的距离
  • 原文地址:https://www.cnblogs.com/wj/p/307704.html
Copyright © 2011-2022 走看看