zoukankan      html  css  js  c++  java
  • 关于WebForm,十分惭愧(下)

    修改Reload中数据
    HtmlGenericControl div = new HtmlGenericControl("div");
    div.ID = "divTest";
    HtmlGenericControl div2 = new HtmlGenericControl("div");
    div2.ID = "divTest2";


    RadioButtonList radio = new RadioButtonList();
    radio.ID = "radioTest";
    radio.DataSource = new List<string>() { "aaa2", "bbb2" };
    radio.DataBind();
    TextBox text = new TextBox();
    text.ID = "textDollers";

    div.Controls.Add(radio);
    div2.Controls.Add(text);

    divRun.Controls.Add(div2);
    divRun.Controls.Add(div);

    这次我们修改下Reload中的代码,在radio加入div前,绑定新数据源,在Refresh后Gestring,我们发现radios呈现的依旧是aaa,bbb两项。

    这次的原因和没有Track无关,是因为raido控件的LoadViewState覆盖了你的数据。我可要小心这个问题了。

    为什么我的Reload要在LoadViewState中执行呢?据说这是MSDN推荐的,他真的好吗?试着再次修改Reload代码,把aaa2,bbb2的绑定放到最底端,添加到控件树之后。结果发现绑定新数据依旧无效,为什么呢?此时虽然base.LoadViewState执行了,但我猜想此时divRun的状态还在LoadViewState之前,在为添加到其的控件进行周期追赶时,可能并不会执行相应的LoadViewState,要等整个的LoadViewState步骤跳出去,也就是说我们在最后执行的绑定还是被覆盖了。试着把Reload方法放到Page_Load中执行,发现新数据在回发后,呈现在页面上了。

    啊,暂时想不起来什么新的测试了。可能下一步在开发中会涉及到很多LiteralControl,也许会有新发现。

    后续

    写完此篇文章后我又读了一点资料,做了一个试验:在divRun中添加一个dropdownlist,在page_load中绑定数据,在Refresh中将radio控件添加在此dropdownlist之前,但Reload中顺序不变,即第一页面加载是 dropdownlist,Refresh后虽然变成了radio,drop, text,但此时dropdownlist view state数据已经加载完,所以依旧能看到drop绑定的数据,(填写textbox).第三次GetString后,顺序变成了drop,text,radio,直接影响了view state 的装载,结果是drop和radio无数据,但text之前填写的数据还保存完好。我此时有两个疑问,第一是为什么顺序改变了,并没有之前的报黄页而是没加载成数据而已,第二是为什么text是好的,难道和post数据有关?当我再次试验,在Refresh中,为TextBox添加text.Font.Bold = true;后,在GetString直接黄页。

    不理解,看来要等下一步去调试源码才能知道了。

    还有,文章中提出加载动态控件最好在Init步骤,理由是这样可以打乱顺序,在我的业务逻辑中,因为不存在静态空间在中间的情况所以无所谓。但我猜测即使Init中顺序也不能随意打乱的吧?我上面的错误放在Init中就没事了?由于Init中还没有viewstate数据,页面状态没法判断,所以测试比较麻烦,而且我实际开发中也遇不上。

  • 相关阅读:
    译 PrestaShop开发者指南 第三篇 设置本地安装环境
    译 PrestaShop开发者指南 第二篇 代码规范
    [译]PrestaShop开发者指南 第一篇 基础
    Discuz!X3解读之类引入机制及目录结构
    Discuz的缓存体系
    x3d 规范 在线镜像版
    大容量数据库对表做分割
    链表 队列 堆栈 视频
    How ASP.NET MVC Works?
    SQLServer查看和解决死锁的方法
  • 原文地址:https://www.cnblogs.com/apodemakeles/p/2358094.html
Copyright © 2011-2022 走看看