2011-12-13 47 views
1

我有一个下拉列表,当更改时会将新值保存到ViewState变量中,以便在回发后,下拉列表将从ViewState中检索它的选定值(如果以前设置的话)。将下拉列表选中的值保存到ViewState

当它试图将选定的值存储在DropDownList1_SelectedIndexChanged到ViewState中时,它总是插入原始值而不是更新的值。在这种情况下,ViewState始终为“R”,并且不会根据其他选定的值进行更改。

任何想法?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace WebApplication11 
{ 
public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

     if (ViewState["List1_Value"] != null) 
     { 
      DropDownList1.SelectedValue = ViewState["List1_Value"].ToString(); 

     } 
     else 
     { 
      DropDownList1.SelectedValue = "R"; 

     } 

    } 

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     ViewState["List1_Value"] = DropDownList1.SelectedValue.ToString(); 

    }  

} 
} 
+0

你确定问题出现在viewstate中吗?它是不是总是R,因为if语句返回FALSE? – 2011-12-13 22:55:07

+0

if语句在第一个page_load上返回false。然后,当选定的值更改时,ViewState保存列表值,但仅保存原始“R”,而不会选择用于触发SelectedIndexChanged的不同值。第二次,if语句为true,并且列表从ViewState中检索它的值,该值仍然是“R”,因为selectedIndexChanged不会将新选定的值保存到ViewState中。 – 2011-12-13 23:20:39

回答

0

Page_Load事件在SelectedIndexChanged事件之前触发。当您更改下拉列表中的值时,ViewState的值仍然为空,因此下拉列表设置为“R”?

故事一起来看看下面的MSDN文章讨论页面生命周期:http://msdn.microsoft.com/en-us/library/ms178472.aspx

+0

ok,但第二次ViewState的值为“R”,这意味着ViewState在页面重新加载之前保存。只需要弄清楚如何在ViewState中获得不同的值? – 2011-12-13 23:17:24

1

更改Page_Load方法绕过下拉列表中的代码时,它不是一个回。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     if (ViewState["List1_Value"] != null) 
     { 
      DropDownList1.SelectedValue = ViewState["List1_Value"].ToString(); 
     } 
     else 
     { 
      DropDownList1.SelectedValue = "R"; 
     } 
    } 
} 
相关问题