Элементы DropDownList сбрасываются на SelectedIndexChanged - PullRequest
1 голос
/ 17 сентября 2010

У меня есть каскадный выпадающий список на моей странице. Первый раскрывающийся список содержит список событий. Второй выпадающий список содержит список участников. Когда событие выбрано, выполняется вызов AJAX, чтобы получить список участников этого события и заполнить второй раскрывающийся список.

Моя проблема в том, что для выпадающего списка участников я хочу, чтобы пользователь перенаправлялся на URL-адрес в событии SelectedIndexChanged с выбранным значением в строке запроса. Но при событии SelectedIndexChanged все элементы во втором раскрывающемся меню сбрасываются. Вот мой код:

<script type="text/javascript" language="javascript">      

    $(document).ready(function()
    {
        $('#<%= ddlEvents.ClientID %>').change(function() 
        {
           $.ajax({
               type: "POST",
               url: 'Default.aspx/PopulateAttendees',
               data: '{EventId: ' + $('#<%= ddlEvents.ClientID %>').val() + '}',
               contentType: "application/json; charset=utf-8",
               dataType: "json",
               success: OnAttendeesPopulated
           });
        });


        function OnAttendeesPopulated(response)
        {
            var attendees = response.d;
            var attendeesDropdown = $("#<%= ddlAttendees.ClientID %>");

            attendeesDropdown.removeAttr("disabled");
            $.each(attendees, function()
            {
                attendeesDropdown.append($("<option</option>").val(this['Value']).html(this['Text']));
            });
        }
    });

</script>

<asp:DropDownList ID="ddlEvents" runat="server"></asp:DropDownList>
<br /><br />
<asp:DropDownList ID="ddlAttendees" runat="server" Enabled="false" onselectedindexchanged="ddlAttendees_SelectedIndexChanged" AutoPostBack="true">
</asp:DropDownList>

И в моем коде позади:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        //Bind dropdown to Events
        ddlEvents.DataSource = EventsList();
        ddlEvents.DataTextField = "Name";
        ddlEvents.DataValueField = "EventID";
        ddlEvents.DataBind();
    }
}


[System.Web.Services.WebMethod]
public static ArrayList PopulateAttendees(int EventId)
{
    ArrayList attendees = new ArrayList();
    attendees = GetAttendees(EventId);

    return attendees;
}


protected void ddlAttendees_SelectedIndexChanged(object sender, EventArgs e)
{
    string AttendeeId = ddlAttendees.SelectedValue;

    Response.Redirect("http://mysite.com?id=" + AttendeeId);
}

Когда происходит событие SelectedIndexChanged, ddlAttendees будет пустым.

Кто-нибудь знает, как я могу хранить предметы в ddlAttendees?

Ответы [ 2 ]

2 голосов
/ 17 сентября 2010

Я бы хотел включить событие изменения индекса на стороне клиента, которое записывает идентификатор посетителя в скрытое поле перед отправкой назад. Затем получите доступ к этому полю из кода. Я думаю, что ddl теряет состояние, потому что он заполнен на стороне клиента (я знаю, что эти два утверждения звучат противоречиво!). Но я думаю, что скрытое поле будет сохраняться гораздо надежнее, чем ddl.

0 голосов
/ 17 сентября 2010

Дело в том, что когда вы делаете ajax-вызов, чтобы обновить dom, он на самом деле не обновляет его в смысле того, что страница знает, есть ли она, так как она отображается после загрузки dom, клиент видит изменения но страница не знает, что изменения были внесены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...