2017-05-02 1 views
1

C#으로 사용자 지정 드롭 다운 목록을 만드는 중입니다. "ul"각 항목을 "li"으로 작성하고 jQuery에서 클릭을 감지하고 실제 셀렉션을 업데이트합니다.이를 숨기는 클래스로 렌더링합니다. 나는 분명히 내가 뭘 잘못하고 있는지 모른다. DropDownList로내 사용자 지정 드롭 다운 목록에 제출시 선택한 인덱스 값이 없습니다

에서 사용자 지정 컨트롤 상속은

C#을 방법을 렌더링

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

문제가 렌더링에서 항목을 채우고있는 것으로 보입니다. 이것은 실제로 시간 선택기 DropDownList 였고 렌더링에 실수를 범했습니다. Population을 CreateChildControls() 메서드로 옮겼습니다. 이제 작동합니다.

관련 문제