2013-04-05 40 views
0

我已經設置了我認爲正確的標記和代碼,將下拉列表放在中繼器的標題模板中,但由於某種原因,它無法正常工作。最初我看到下拉列表,但是當我在列表中進行選擇時,OnSelectedIndexChanged事件似乎不會觸發使用添加的方法來處理它,並且我無法弄清楚我錯過了什麼,因爲我認爲這是是一件簡單的事情。中繼器不工作的標題模板中的下拉列表

這裏有標記的要領:

<asp:Repeater ID="repNewsItems" runat="server"> 
<HeaderTemplate> 
     <asp:DropDownList ID="ddDateSortCategories" runat="server" Width="200" AutoPostBack="true" OnSelectedIndexChanged="ddDateSortCategories_SelectedIndexChanged1" CssClass="mergersDropDown"> 
      <asp:ListItem Selected="True" Text="Most Recent" Value="newest"></asp:ListItem> 
      <asp:ListItem Text="Oldest" Value="oldest"></asp:ListItem> 
     </asp:DropDownList> 
</HeaderTemplate> 

<ItemTemplate> 
    // other stuff 

這裏是後臺代碼的膽量:

[MacroParameter(MacroParameterType.Number)] 
    public int PageId { get; set; } 

    public string _category = ""; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (repNewsItems == null) return; 

     _category = Request.QueryString["category"]; 

     repNewsItems.ItemDataBound += new RepeaterItemEventHandler(repNewsItems_ItemDataBound); 

     repNewsItems.DataSource = (string.IsNullOrEmpty(NewsNodeIds)) 
             ? GetNewsItemsForYear(NewsYearToDisplay, _category) 
             : DaNews; 
     repNewsItems.DataBind(); 
    } 

    protected void ddDateSortCategories_SelectedIndexChanged1(object sender, EventArgs e) 
    { 
     DropDownList ddl = (DropDownList)(sender); 
     Response.Redirect(umbraco.library.NiceUrl(PageId) + "?category=" + Server.UrlEncode(ddl.SelectedValue.ToString())); 
    } 

    void repNewsItems_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.Header) 
     { 
      DropDownList ddl = (DropDownList)e.Item.FindControl("ddDateSortCategories"); 
      if (!IsPostBack) 
      { 
       if (ddl != null) 
       { 
        ddl.DataSource = GetNewsItemsForYear(DocumentTypes.NewsItem.GetMostRecentYear(NewsCategoryToDisplay).ToString(), _category); 
        ddl.DataBind(); 
       } 
      } 
      if (!String.IsNullOrEmpty((Request.QueryString["category"]))) ddl.Text = Request.QueryString["category"]; 
     } 
     // other stuff 
    } 

回答

0

我發現了兩個問題與上面的代碼。首先,我錯誤地將我的列表項目綁定到了我的下拉列表,我的意思是,硬編碼列表項目不會更改。但是這並沒有解決我的主要問題。什麼做的是,我幾乎忘了把它們包裝:

repNewsItems.ItemDataBound += new RepeaterItemEventHandler(repNewsItems_ItemDataBound); 
repNewsItems.DataSource = (string.IsNullOrEmpty(NewsNodeIds)) 
            ? GetNewsItemsForYear(NewsYearToDisplay, _category) 
            : DaNews; 
repNewsItems.DataBind(); 

if (!IsPostBack) {} 

條件語句。這意味着每次觸發回發事件時,它都會進入Page_Load方法,重新綁定整個中繼器的初始狀態,並且永遠不會讓它通過我的SelectedIndexChanged事件處理器ddDateSortCategories_SelectedIndexChanged1。