C# DropDownList不接受我尝试分配的SelectedIndex

C# DropDownList不接受我尝试分配的SelectedIndex,c#,asp.net,.net,C#,Asp.net,.net,我很难弄明白这一点,我希望你们能帮助我 我有一个名为Index.aspx的页面,其中有一个DropDownList,它是一个单独的UserControl类(因为它将在其他页面中使用)。下面是代码: UcSelecionarLocal.ascx: <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="UcSelecionarLocal.ascx.cs" Inherits="QuickMassage.uc.

我很难弄明白这一点,我希望你们能帮助我

我有一个名为
Index.aspx
的页面,其中有一个
DropDownList
,它是一个单独的
UserControl
类(因为它将在其他页面中使用)。下面是代码:

UcSelecionarLocal.ascx:

<%@ Control Language="C#" AutoEventWireup="true" 
    CodeBehind="UcSelecionarLocal.ascx.cs" 
    Inherits="QuickMassage.uc.UcSelecionarLocal" %>
<asp:DropDownList ID="ddlLocais" runat="server" 
                  CssClass="span4 dropdown-toggle" AutoPostBack="true">
</asp:DropDownList>
}

此控件放置在
Index.aspx
中,并正确加载其值。它所包含的表单的操作设置为
agendamentos.aspx
。当我更改
ddlist
时,页面将按原样提交到表单操作页面

在另一个页面上,问题开始了:我将参数发布到此页面,其中一个参数是
ddlist
值。在即时窗口中,我检查值,它就在那里,假设它是1

长话短说,我有以下代码:

agendamentos.aspx.cs:

protected void Page_Load(object sender, EventArgs e) {
        DropDownList locais = ObterComponenteListaLocais();
        try {
            locais.SelectedIndex = 
              int.Parse(HttpContext.Current.Request["ucSelLocal$ddlLocais"]);
        }
调试时,我看到
locais.SelectedIndex
是-1。任务完成后,它仍然是-1。页面加载,然后我将
ddlist
值再次更改为2。在调试上述同一代码时,我看到
locais.SelectedIndex
现在是1。同样,将其设置为2(通常是这样)不会产生任何效果。如果我将
ddlist
再次更改为3,则
SelectedIndex
将变为2,并且不取值3

换句话说:新加载页面中的索引值就是之前加载的页面的值


你们能帮帮我吗?

这是因为页面加载事件在用户控件加载之前在页面中触发。这样做:

public partial class UcSelecionarLocal : UserControl
{

    protected void Page_Load(object sender, EventArgs e)
    {
    }

    public void PreencherLocais()
    {
        ddlLocais.Items.Clear();
        ddlLocais.Items.Add(new ListItem("Selecione", "0"));
        ControleLocal controle = new ControleLocal();
        DataTable tab = controle.ListarLocais();
        foreach (DataRow row in tab.Rows)
        {
            ddlLocais.Items.Add(new ListItem(row["Descricao"].ToString(), row["ID"].ToString()));
        }
    }
}
然后在您的aspx页面中:

protected void Page_Load(object sender, EventArgs e) 
{
        if (!IsPostBack)
            this.idOfYourUserControl.PreencherLocais();

        DropDownList locais = ObterComponenteListaLocais();
        try {
            locais.SelectedIndex = 
              int.Parse(HttpContext.Current.Request["ucSelLocal$ddlLocais"]);
        }
}

另外,因为您的问题有点让人困惑,一个重要的注意事项是页面加载在从回发数据的控件捕获数据之前触发。因此,这是一个不好的地方,以获取他们的信息,因为它将是以前的。这就是为什么您需要创建一个函数,该函数在加载控件数据后将执行按钮单击之类的操作。

您应该在
下拉列表
有数据之后设置
selectedindex
,即在
下拉列表
数据绑定事件中,在
下拉列表
与数据绑定之前,您正在尝试在
页面加载中设置值
ObterComponenteListaLocais
做什么?@AnnL。基本上,它返回DropDownList,因为它在用户控件中。@rs.将尝试。谢谢你的回答!
protected void Page_Load(object sender, EventArgs e) 
{
        if (!IsPostBack)
            this.idOfYourUserControl.PreencherLocais();

        DropDownList locais = ObterComponenteListaLocais();
        try {
            locais.SelectedIndex = 
              int.Parse(HttpContext.Current.Request["ucSelLocal$ddlLocais"]);
        }
}