SelectionList总是返回NULL

问题描述:

我有一个很奇怪的问题,其中SelectionList总是返回NULL,当我尝试检查其选定的项目/值。我谷歌了一下,我发现,当我点击提交按钮,页面正在刷新和SelectionList正在数据绑定再次,所以它会恢复到其原来的行为。SelectionList总是返回NULL

然后我试着在Page_Load事件!IsPostBack附上绑定代码,但仍然当我尝试访问Selected属性它为空,并引发异常。

任何帮助将不胜感激。

我的代码是这样的......(括号不正确匹配)

static SelectionList[] Symptoms; 
static string UserID = ""; 

cmbSymptoms1,cmbSymptoms2,cmbSymptoms3和cmbSymptoms4是SelectionLists。我将它们放入一个SelectionList的数组中,然后设置属性。

我不得不让它们变成静态的,否则当我点击按钮来更新时,它们不会保留它们的值。任何想法为什么他们不保留这些值?

protected void Page_Load(object sender, EventArgs e) 
{ 

if (this.IsPostBack == false) 
     { 
      //System.Diagnostics.Debug.WriteLine("Not IsPostBack"); 

      if (Request.QueryString["id"] != null && Request.QueryString.ToString() != "") 
      { 
       //System.Diagnostics.Debug.WriteLine("id query string is not null :- " + Request.QueryString["id"]); 

       myclass = new Class1(); 

       UserID = Request.QueryString["id"]; 

       Symptoms = new SelectionList[4]; 

       Symptoms[0] = cmbSymptoms1; 
       Symptoms[1] = cmbSymptoms2; 
       Symptoms[2] = cmbSymptoms3; 
       Symptoms[3] = cmbSymptoms4; 

       System.Data.DataTable dt = myclass.getAllSymptoms(); 

       foreach (SelectionList listItem in Symptoms) 
       { 
        listItem.DataSource = dt; 
        listItem.DataTextField = "symptomsname"; 
        listItem.DataValueField = "symptomsid"; 
        listItem.DataBind(); 
        listItem.Items.Insert(0, new MobileListItem("None")); 
       } 

而且在更新按钮单击事件 保护无效cmbUpdate_Click(对象发件人,EventArgs的){

foreach (SelectionList listItem in Symptoms) 
     { 
      if (listItem.SelectedIndex != 0) 
      { 
       cmd.CommandText = "INSERT INTO Patient_Symptom (patientid,symptomid) VALUES (" + UserID + ",'" + listItem.Selection.Value + "')"; 
       cmd.ExecuteNonQuery(); 
      } 

     } 

}

您可以尝试两件事情。尝试将数据绑定代码放在PreRender事件中。第二个也是更好的选择是使用ObjectDataSource控件并以声明方式绑定控件。

+0

如果我把代码放在预渲染中,它总是会发生,不管它是否是一个回发权? – 2010-07-20 22:48:07

+0

不,您也可以在PreRender中执行相同的IsPostBack检查。 PreRender事件在Load之后的页面生命周期中进一步发生,但您仍然可以检查IsPostBack属性。 – drohm 2010-07-21 00:18:49