在后面的代码中的dropdownlist中获取错误的值

时间:2012-10-09 18:46:46

标签: asp.net drop-down-menu

我已经阅读了一些不同的例子,对于那些不完全理解asp.net页面生命周期的人来说,这似乎是一个明显的新手问题,抱歉还在学习。我没有尝试修复过程。

ASPX:

...
<%
for( int j = 0; j < 11; j++)
{
  ChildWeightPounds.Items.Add( new ListItem(j.ToString(),j.ToString()));
}
%>
<asp:DropDownList ID="ChildWeightPounds" runat="server" OnSelectedIndexChanged="DropDownListSelected">
     <asp:ListItem Value="">-Select-</asp:ListItem>
</asp:DropDownList>
...
<asp:Button ID="InsertButton" runat="server" Text="Submit" OnClick="InsertButton_Click" />

aspx.cs:

protected void InsertButton_Click(object sender, EventArgs e)
{
   foreach (Control c in NewPatientForm.Controls)
    {
        ....
        if (c is TextBox)
        {
             TextBox tb = (TextBox)c;
             //Expected response:
             Response.Write( "field: " + tb.ID + " = " + tb.Text + "<br />");
        }
        if (c is DropDownList)
        {
            DropDownList ddl = (DropDownList)c;

            //Unexpected response: 
            //this is not giving me my selected value, but only the top item ("--select--")
            Response.Write("field: " + ddl.ID + ", selectedItem: " + ddl.SelectedItem.Value + "<br />");
         }
    }
 }

很明显这是一个IsPostBack,DataBind()问题,我对页面生命周期缺乏了解。但是没有意义的是,我正在遍历所有控件,文本框,复选框,复选框列表都工作正常,并在字段中给我值,由于某种原因,下拉列表没有给我这个值。 / p>

我尝试过使用OnSelectedIndexChanged事件,我尝试过使用DataBind()函数,但是玩这些函数仍然没有给我带来价值。

2 个答案:

答案 0 :(得分:2)

您的示例中最大的问题是您在<% %>页面中使用内联C#。 asp.net不建议这样做。这更像是一种传统/经典的ASP方法,由于种种原因,它无法很好地与.NET配合使用。

尝试将从标记文件添加到dropdownlist的项目的代码移动到.cs文件中,并确保挂钩在OnPreRender之前或之前发生的页面事件。这是您可以更改页面控件并使viewstate / lifecycle正常工作的最后一点。

protected void Page_Load(object sender, EventArgs e)
{
    for( int j = 0; j < 11; j++)
    {
        ChildWeightPounds.Items.Add( new ListItem(j.ToString(),j.ToString()));
    }
}

如果没有运行您的示例,可能会在dropdownlist中的错误时间将值插入lifecycle,并且当您尝试访问后面代码中的选定值时它不起作用。

请考虑以下关于asp.net lifecycle的文章,它可以为您提供帮助。

答案 1 :(得分:1)

您可以调整DropDownList上的AutoPostBack="true",并定义OnSelecIndexChanged event

    <asp:DropDownList ID="ChildWeightPounds" runat="server"
         OnSelectedIndexChanged="DropDownListSelected" AutoPostBack="true>
         <asp:ListItem Value="">-Select-</asp:ListItem>
    </asp:DropDownList>

背后的代码

void DropDownListSelected(Object sender, EventArgs e)
{
 var value =  ChildWeightPounds.SelectedValue;
}