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控件并以声明方式绑定控件。
如果我把代码放在预渲染中,它总是会发生,不管它是否是一个回发权? – 2010-07-20 22:48:07
不,您也可以在PreRender中执行相同的IsPostBack检查。 PreRender事件在Load之后的页面生命周期中进一步发生,但您仍然可以检查IsPostBack属性。 – drohm 2010-07-21 00:18:49