Después de hacer una gran cantidad de investigación en línea, todavía estoy perplejo por este problema. Tengo una página que carga los nombres y el recuento de categorías en una lista desplegable. Solo hago esto si !(Page.IsPostBack)
. Cuando AutoPostBack
dispara el SelectedIndex = 0
. He intentado varias cosas diferentes. Aquí está mi código:Asp.NET DropDownList restablece SelectedIndex después de PostBack
PÁGINA
<form id="AddAssignmentForm" runat="server">
<asp:ScriptManager ID="ScriptManager1" EnablePartialRendering="true" runat="server" />
<asp:UpdatePanel ID="CommentUpdate" runat="server">
<ContentTemplate>
Add Comment
<asp:DropDownList ID="ddlCategory" runat="server" Width="206" OnSelectedIndexChanged="ddlCategory_SelectedIndexChanged" AutoPostBack="true" />
<asp:TextBox ID="txtName" runat="server" Width="200" />
<asp:TextBox ID="txtAbbrv" runat="server" Width="200" />
<asp:TextBox ID="txtDescription" runat="server" Width="200" Height="90" TextMode="MultiLine" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
Aquí está el código de back-end.
private void Page_Load(object sender, System.EventArgs e)
{
if (!Page.IsPostBack)
{
GetCategories();
}
}
public void GetCategories()
{
String strSql = @"SELECT Name, Total
FROM MyTable";
if (con.State == ConnectionState.Closed)
con.Open();
OleDbCommand cmdsql = new OleDbCommand(strSql, con);
OleDbDataReader cmdReader = cmdsql.ExecuteReader();
if (cmdReader.HasRows)
{
while (cmdReader.Read())
{
ddlCategory.Items.Add(new ListItem(cmdReader["Category_Name"].ToString(), cmdReader["Total"].ToString()));
}
ddlCategory.SelectedIndex = -1;
}
cmdReader.Close();
con.Close();
}
public void FillForm(int index)
{
ListItem item = ddlCategory.Items[index];
txtName.Text = item.Text + " " + (Convert.ToInt32(item.Value) + 1).ToString();
txtAbbrv.Text = item.Text.Substring(0, 1) + (Convert.ToInt32(item.Value) + 1).ToString();
}
public void ddlCategory_SelectedIndexChanged(Object sender, EventArgs e)
{
//When I break here SelectedIndex always = 1.
FillForm(ddlCategory.SelectedIndex);
}
Sólo quiero ser capaz de llenar el formulario basado en el índice seleccionado, pero me parece que no puede obtener la respuesta correcta. Cualquier ayuda es apreciada.
estoy suponiendo que haya habilitado estado de vista? ¿Ha revisado la solicitud para ver cuál es el valor que se devuelve para ese control? ¿Cuántos elementos hay en el menú desplegable? – Dan
Estoy bastante seguro de haber encontrado este problema antes. ¿Puedes intentar hacer que el panel de actualización sea condicional y configurar un desencadenante de publicación asincrónica en tu evento DropDownLists selectedindex changed? –
Ahora mismo hay 4 artículos en el menú desplegable. No estoy seguro de a qué te refieres con consultar la solicitud para ver qué valor se devuelve. Revisé el ddlCategory.SelectedIndex en SelectedIndexChanged, y siempre es 1. – Genzume