我尝试在全局级别(如果可能的话(简单地在<asp:DropDownList>
类型的每个控件周围添加一个div包装器。在这一点上,我已经用一个asp皮肤解决了它,为所有<asp:DropDownList>
添加了"默认选择"类,然后jquery为每个添加一个div。
$j(".default-select").wrap("<div class='myClass'></div>");
现在,我的问题。是否可以从代码隐藏中添加此div 包装器,而不是依赖 javascript。
控制适配器:我知道这应该可以通过编写一个覆盖<asp:DropDownList>
渲染方法的控制适配器来实现(如下所述:带有
您的解决方案几乎有效。服务器控件只能存在于服务器窗体的范围内,您需要在页面上执行递归搜索或直接在窗体控件集合中查找。一旦你有了 DropDownList 并将其包装在一个div 容器周围,就需要将其添加到控件集合中。
另外,我认为最好在OnPreInit中执行此操作。
protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);
var j = 0;
foreach (DropDownList control in form1.Controls.OfType<DropDownList>().ToList())
{
var div = new HtmlGenericControl();
div.ID = "div" + j;
div.TagName = "div";
div.Attributes["class"] = "myClass";
div.Controls.Add(control); // or control.Controls.Add(div); but this wouldn't wrap it.
j++;
form1.Controls.Add(div);
}
}
我希望这是有帮助的。让我知道你过得怎么样。
无论哪种方式,你想要的是自定义的,你必须为它编码。 所以IMO,最好和最简单的选择是自定义控件。 您可能需要花一些时间来重构引用以替换<asp:DropDownList>
,但是在您尝试其他方式的所有时间中,您现在已经可以完成。 :)
我学到了艰难的方式,保持简单通常是最好的方法。