No puedo obtener la lista desplegable asp: en mi control de usuario para realizar una devolución para actualizar el número de días.

El control de usuario:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Profile.ascx.cs" Inherits="TestApp2.Views.Profile" %>


<asp:UpdatePanel ID="ProfileMainUpdatePanel" runat="server">
        <ContentTemplate>
            <div class="form-group profile-form">
                <asp:DropDownList runat="server" id="selYear" class="form-control profile-date right-align" OnSelectedIndexChanged="selYear_SelectedIndexChanged" />
                <asp:DropDownList runat="server" id="selMonth" class="form-control profile-date right-align" OnSelectedIndexChanged="selMonth_SelectedIndexChanged"  />
                <asp:DropDownList runat="server" id="selDay" class="form-control profile-date right-align"/>
                <asp:label runat="server" class="control-label right-align profile-form-label" for="selDay" Text="Date of Birth" ID="temp" />
            </div>
        </ContentTemplate>
</asp:UpdatePanel>

Y el código detrás

    public void fillDays()
    {
        selDay.Items.Clear();
        //getting numbner of days in selected month & year
        int noofdays = DateTime.DaysInMonth(Convert.ToInt32(selYear.SelectedValue), Convert.ToInt32(selMonth.SelectedValue));

        //Fill days
        for (int i = 1; i <= noofdays; i++)
        {
            selDay.Items.Add(i.ToString());
        }
        selDay.Items.FindByValue(System.DateTime.Now.Day.ToString()).Selected = true;// Set current date as selected

    }

    protected void selMonth_SelectedIndexChanged(object sender, EventArgs e)
    {
        temp.Text = "here";
        fillDays();
    }

    protected void selYear_SelectedIndexChanged(object sender, EventArgs e)
    {
        temp.Text = "there";
        fillDays();
    }

Todo se configura bien en la carga de la página, pero este bit de devolución de llamada no se activa, ni siquiera el texto de la etiqueta cambia.

También intenté trabajar en el lado del cliente agregando estos a la configuración inicial

selYear.Attributes.Add("onchange", "fillDays();");
selMonth.Attributes.Add("onchange", "fillDays();");

El código de cliente como:

<script type="text/javascript">

function fillDays() {
    alert("yes");
}

Eso tampoco dispara.

1
colobusgem 12 feb. 2015 a las 13:43

2 respuestas

La mejor respuesta

Debe configurar AutoPostBack="true" para obtener el evento SelectedIndexChanged, el valor predeterminado para DropDownList es false.

<asp:DropDownList runat="server" id="selYear" AutoPostBack="true" class="form-control profile-date right-align" OnSelectedIndexChanged="selYear_SelectedIndexChanged"  />

AutoPostBack

Obtiene o establece un valor que indica si una devolución al servidor ocurre automáticamente cuando el usuario cambia la selección de la lista, MSDN.

1
Adil 12 feb. 2015 a las 10:45
 try this in Update Panel. Hope its working...


  <asp:UpdatePanel ID="ProfileMainUpdatePanel" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
    <ContentTemplate>
        <div class="form-group profile-form">
            <asp:DropDownList runat="server" id="selYear" class="form-control profile-date right-align" OnSelectedIndexChanged="selYear_SelectedIndexChanged" />
            <asp:DropDownList runat="server" id="selMonth" class="form-control profile-date right-align" OnSelectedIndexChanged="selMonth_SelectedIndexChanged"  />
            <asp:DropDownList runat="server" id="selDay" class="form-control profile-date right-align"/>
            <asp:label runat="server" class="control-label right-align profile-form-label" for="selDay" Text="Date of Birth" ID="temp" />
        </div>
    </ContentTemplate>
0
Hardeep Randhawa 12 feb. 2015 a las 11:08