首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

ViewState生命周期的有关问题

2012-05-27 
ViewState生命周期的问题先发下测试代码。public string hello{get{if (string.IsNullOrEmpty(Convert.ToSt

ViewState生命周期的问题
先发下测试代码。
public string hello
  {
  get
  {
  if (string.IsNullOrEmpty(Convert.ToString(ViewState["hello"])))
  {
  ViewState["hello"] = System.Guid.NewGuid().ToString();
  }
  return ViewState["hello"].ToString();
  }
  }

   
  protected void Page_Load(object sender, EventArgs e)
  {
  if (!IsPostBack)
  {
  Label1.Text = hello;
  }
  }

  protected void a_Click(object sender, EventArgs e)
  {
  abc.Text = hello;
  }

这是页面代码

HTML code
<span><%=hello %></span>        <div>    <asp:Label runat="server" ID="Label1"></asp:Label>    <asp:Label runat="server" ID="abc"></asp:Label>    <asp:Button runat="server" ID="a" Text="hello world" onclick="a_Click" />        </div>

当标红的那句去掉后。hello 呈现的数据 和 abc 的数据会不同。
而当有 红色的代码时,数据都是一样的。
求解..

[解决办法]
Label1.Text = hello; 这一句是在页面第一次加载的时候执行。
执行完成后, ViewState["hello"] 就有值了。
所以每次都取到相同的。

如果没有Label1.Text = hello; 就会每次都Lable1.Text 就一直是空, 而abc.Text 每次不一样。

你应该去了解一下asp.net 的生命周期。
[解决办法]

你自己把 Label1.Text = hello; 

IsPostBack位置换着调试 就知道原因了
[解决办法]
LZ我完全复制你的代码,不管有没有红色的那个,数据都是一样的。而且实际的编译和红色部分没什么关系的
[解决办法]
LZ看看页面的生命周期,然后看看页面一些事件的执行顺序。
[解决办法]
<%=hello%>
是在页面的渲染阶段执行的,也就相当于Response.Write(hello);
而ViewState的保存在是Render阶段之前的,所以在以后对ViewState的操作将不会被保存到ViewState序列号为base64发送到客户端的字符串中
[解决办法]
你做个断点 然后单步调试就明白为什么了

还有就是看 生命周期 就知道为什么了 8楼的解释我就不多说了。

说白了就是当你窗体加载事件结束之后 他就去页面执行代码片段的内容

生命周期。。

热点排行