2010-09-17 62 views
1

我的頁面上有一個級聯下拉列表。第一個下拉列表包含事件列表。第二個下拉列表包含與會者列表。選擇某個事件後,將進行AJAX調用以獲取該事件的與會者列表,並填充第二個下拉列表。DropDownList項目在SelectedIndexChanged上重置

我的問題是,對於與會者下拉菜單,我希望用戶被重定向到SelectedIndexChanged事件上的URL,並在查詢字符串中選擇值。但是在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

我會試圖包含一個客戶端索引已更改的事件,它會在回發之前將與會者ID寫入隱藏字段。然後從代碼隱藏中訪問此字段。我認爲DDL正在失去國家,因爲它是填充客戶端(我知道這兩個聲明聽起來矛盾!)。但我認爲隱藏領域將比ddl更可靠地持續下去。

+0

好主意:)我正在使用隱藏字段來存儲與會者ID,它正在工作。謝謝。 – Steven 2010-09-17 14:57:10

+0

沒問題。客戶端的東西是可愛的和光滑的,但有時它和服務器端真的不起來! – 2010-09-17 15:25:50

0

的事情是,當你以更新它實際上沒有更新它在頁面意義上的DOM做一個Ajax調用知道,如果它的存在,因爲它呈現的DOM被加載後,客戶看到的更改,但頁面不知道已做出更改。

相關問題