我在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上似乎没有任何项目。
答案 0 :(得分:0)
事实证明问题似乎是我在Render上填充了这些项目。这实际上是一个时间选择器DropDownList,我错误地填充了Render。我将Population移动到CreateChildControls()方法,它现在正在工作。