询问者
请教一个关于asp.net 生命周期的问题

问题
-
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { this.DropDownList1.DataSource = DAL.UnitInfo.GetData(); this.DropDownList1.DataTextField = "UnitName"; this.DropDownList1.DataValueField = "id"; this.DropDownList1.DataBind(); this.DropDownList1.Items.Insert(0, new ListItem("全部", "101")); DateTime weekStart = DateTime.Now.AddDays(-(int)(DateTime.Now.DayOfWeek) - 2); DateTime weekEnd = weekStart.AddDays(7); this.TextBox1.Text = weekStart.ToShortDateString(); this.TextBox2.Text = weekEnd.ToShortDateString(); setFilterExpression();//放到这里可以正确查询button } //setFilterExpression();如果该方法放到这里,button执行提交后,无法正确查询 ApplyFilterExpression(); } #region 查询与筛选操作 private void setFilterExpression() { var sbFilter = new System.Text.StringBuilder(1000); if (this.DropDownList1.SelectedIndex != 0) { sbFilter.Append("UnitID='").Append(this.DropDownList1.SelectedValue).Append("'"); } if (this.TextBox1.Text.Trim().Length > 0) { if (sbFilter.Length != 0) { sbFilter.Append(" AND "); } sbFilter.Append("sbsj >='").Append(this.TextBox1.Text.Trim()).Append("'"); } if (this.TextBox2.Text.Trim().Length > 0) { if (sbFilter.Length != 0) { sbFilter.Append(" AND "); } sbFilter.Append("sbsj <='").Append(this.TextBox2.Text.Trim()).Append("'"); } ViewState["filter"] = sbFilter.ToString(); } private void ApplyFilterExpression() { //this.Literal3.Text = ""; string filter = Convert.ToString(ViewState["filter"]); //this.Literal3.Text = filter; if (filter.Length != 0) { this.ObjectDataSource1.FilterExpression = filter.ToString(); } else { this.ObjectDataSource1.FilterExpression = null; } } #endregion protected void Button1_Click(object sender, EventArgs e) { setFilterExpression(); ApplyFilterExpression(); //Response.Write(ViewState["filter"]); //Response.Write("aaa"); }
就是设置查询条件的viewstate所放置的位置不同,导致结果有问题,百思不得其解,请问是哪个环节有问题呢?详细请看代码中的注释- 已移动 Caillen 2015年3月18日 8:47
全部回复
-
您好,
首先你需要了解asp.net 的页面生存周期,请参考下面文章:
http://www.cnblogs.com/xhwy/archive/2012/05/20/2510178.html第二呢,我建议你先调试下你的代码,看看ViewState["filter"]值得变化。
第三,我建议您使用Session["xx"]去保存变量的值,减少页面负担
-
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ...
setFilterExpression();//放到这里可以正确查询button } //setFilterExpression();如果该方法放到这里,button执行提交后,无法正确查询 ApplyFilterExpression(); } #region 查询与筛选操作 private void setFilterExpression() { ...
} private void ApplyFilterExpression() { ...
} #endregion protected void Button1_Click(object sender, EventArgs e) { setFilterExpression(); ApplyFilterExpression(); }
Web會先跑 Page.Load,後才到 Control的event (就是你這裡的Button.Click)。
如果你把setFilterExpression()放進(!IsPostBack)裡面,那第一次會跑所有的Page.Load裡面的code。
跟著End User 按一下Button,Page.Load會跑,但(!IsPostBack){...}裡面的不會跑,DropDownList裡面應該會沒東西,而code就只跑了Page.Load裡的ApplyFilterExpression,再跑Button1_Click的 setFilterExpression和ApplyFilterExpression。
你原本想的logic是怎樣的?
大家一齊探討、學習和研究,謝謝!
MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
MCT, Microsoft Community Star(TW & HK),
Microsoft MVP for VB.NET since 2003
My MSMVP Blog
請記得將對您有幫助的回覆標示為解答以幫助其他尋找解答及參與社群討論的朋友們。
Please remember to clickMark as Answer on the post that helps you. This can be beneficial to other community members reading the thread. -
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ...
setFilterExpression();//放到这里可以正确查询button } //setFilterExpression();如果该方法放到这里,button执行提交后,无法正确查询 ApplyFilterExpression(); } #region 查询与筛选操作 private void setFilterExpression() { ...
} private void ApplyFilterExpression() { ...
} #endregion protected void Button1_Click(object sender, EventArgs e) { setFilterExpression(); ApplyFilterExpression(); }
Web會先跑 Page.Load,後才到 Control的event (就是你這裡的Button.Click)。
如果你把setFilterExpression()放進(!IsPostBack)裡面,那第一次會跑所有的Page.Load裡面的code。
跟著End User 按一下Button,Page.Load會跑,但(!IsPostBack){...}裡面的不會跑,DropDownList裡面應該會沒東西,而code就只跑了Page.Load裡的ApplyFilterExpression,再跑Button1_Click的 setFilterExpression和ApplyFilterExpression。
你原本想的logic是怎樣的?
大家一齊探討、學習和研究,謝謝!
MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
MCT, Microsoft Community Star(TW & HK),
Microsoft MVP for VB.NET since 2003
My MSMVP Blog
請記得將對您有幫助的回覆標示為解答以幫助其他尋找解答及參與社群討論的朋友們。
Please remember to clickMark as Answer on the post that helps you. This can be beneficial to other community members reading the thread.