我的自定义下拉列表在提交

时间:2017-05-02 13:58:44

标签: c# jquery drop-down-menu custom-controls

我在C#中创建一个看起来更好的自定义Dropdownlist。我写了一个“ 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。我错过了什么?

注意

我刚发现它在Postback上似乎没有任何项目。

1 个答案:

答案 0 :(得分:0)

事实证明问题似乎是我在Render上填充了这些项目。这实际上是一个时间选择器DropDownList,我错误地填充了Render。我将Population移动到CreateChildControls()方法,它现在正在工作。