• 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);
        }
    }
  • 相关阅读:
    ReactiveCocoa RACObserve subscribeNext 时,只有值不一样时才响应
    ReactiveCocoa 监听Enabled和添加Command出错的处理方法
    Masonry + UIView Animations 注意事项
    addObserver forKeyPath options 注意事项
    ios中tabbar得title和navigationbar的title如何修改
    tableview 分组显示返回footerviewt和headerView的高度不能为0的问题
    UITableViewCell的选中时的颜色设置
    ios 枚举 位移操作
    设置UIButton 字体 颜色
    jsoup 源码分析
  • 原文地址:https://www.cnblogs.com/wj/p/307704.html
Copyright © 2020-2023  润新知