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);
        }
    }
  • 相关阅读:
    关于使用CodeFirst,修改类或上下文时操作数据库报错解决方法
    解决:启用多线程调用webBrowsers函数报错:指定的转换无效
    强制IE浏览器或WebBrowser控件使用指定版本显示网页
    EF:分页查询 + 条件查询 + 排序
    (.NET高级课程笔记)委托、事件总结
    windows server 2008 磁盘挂载
    Git的使用
    VLAN原理详解
    Jumpserver的部署和使用
    进程与线程的理解
  • 原文地址:https://www.cnblogs.com/wj/p/307704.html
Copyright © 2011-2022 走看看