2017-05-02 41 views
1

我在C#中創建了一個自定義的Dropdownlist,看起來更好。我正在寫出一個「ul」,每個項目都是「li」,並讓jQuery檢測到點擊並更新實際選擇,我使用隱藏它的類進行渲染。顯然,我不知道我做錯了什麼。從DropDownList中我的自定義Dropdownlist在提交時沒有選定索引的值

定製控件繼承

C#Render方法

protected override void Render(HtmlTextWriter writer) 
    {    
     EnsureChildControls(); 

     writer.WriteLine("<div class='fs_dropdownlist'>"); 

     writer.WriteLine("<label>" + this.SelectedItem.Text + "</label>"); 

     writer.WriteLine("<ul>"); 
     foreach (ListItem item in this.Items) 
     { 
      if (item.Selected) 
       writer.WriteLine("<li class='selected'>" + item.Text + "</li>"); 
      else 
       writer.WriteLine("<li>" + item.Text + "</li>"); 
     } 
     writer.WriteLine("</ul>"); 

     writer.WriteLine("<div class='hidden'>"); 
     base.Render(writer); 
     writer.WriteLine("</div>"); 

     writer.WriteLine("</div>"); 
    } 

jQuery的點擊功能

$(".fs_dropdownlist li").on("click", function() { 
    $(this).addClass("selected"); 
    var selectedText = $(this).text(); 
    var div = $(this).closest(".fs_dropdownlist"); 
    var ddl = div.find("select");   
    var lbl = div.find("label"); 

    lbl.text(selectedText); 
    ddl.val(selectedText); /* Try to set the value on the select tag */ 
}); 

所以,問題是DropDownList中的該的SelectedIndex屬性始終-1。我錯過了什麼?

注意

我剛剛發現它似乎並沒有對回發的任何項目。

+0

我想你必須在'foreach(this.Items中的ListItem項目)...'中設置'SelectedIndex'。由於Javascript改變了客戶端的選擇,這些信息可能不會傳遞到服務器。 –

回答

0

事實證明,問題似乎是我正在渲染Render上的項目。這實際上是一個時間選擇器DropDownList,我犯了填充Render的錯誤。我將人口遷移到CreateChildControls()方法,現在它正在工作。

相關問題