Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在每个asp:DropDownList控件代码后面添加DIV_C#_Asp.net_Html_Controls_Wrapper - Fatal编程技术网

C# 在每个asp:DropDownList控件代码后面添加DIV

C# 在每个asp:DropDownList控件代码后面添加DIV,c#,asp.net,html,controls,wrapper,C#,Asp.net,Html,Controls,Wrapper,我试图简单地在类型的每个控件周围添加一个div包装器。但是,我只想添加一个包装div,而不是重写控件的整个呈现(如果重写该方法,我必须这么做?)。有什么建议吗?也许有一种方法可以向现有适配器添加一些内容 自定义用户控件:另一个解决方案是使用包装构建自定义的,但是,这将迫使我在整个项目(大型项目)中替换的每个实例。我宁愿改变原来的控制方式,使我的风格适用于所有地方 因此总结:有没有一种简单的方法可以让所有的呈现为: 而不仅仅是: 我的第一次尝试(在页面加载时):我试图在页面加载方法中添加此

我试图简单地在
类型的每个控件周围添加一个div包装器。但是,我只想添加一个包装div,而不是重写
控件的整个呈现(如果重写该方法,我必须这么做?)。有什么建议吗?也许有一种方法可以向现有适配器添加一些内容

自定义用户控件:另一个解决方案是使用包装构建自定义的
,但是,这将迫使我在整个项目(大型项目)中替换
的每个实例。我宁愿改变原来的控制方式,使我的风格适用于所有地方

因此总结:有没有一种简单的方法可以让所有的
呈现为:


而不仅仅是:


我的第一次尝试(在页面加载时):我试图在页面加载方法中添加此代码,但我找不到任何方法来呈现该div

var j=0;
foreach(Page.Controls.OfType()中的DropDownList控件)
{
HtmlGenericControl div=新的HtmlGenericControl();
div.ID=“div”+j;
div.TagName=“div”;
div.Attributes[“class”]=“myClass”;
div.Controls.Add(control);//或control.Controls.Add(div);但这不会包装它。
j++;
}

无论哪种方式,你想要的都是定制的,你必须为它编码。因此,在我看来,最好、最简单的选择是自定义控件。您可能需要花一些时间重构引用以替换您的
,但在您花了这么多时间尝试另一种方法之后,您现在就可以完成了。:)


我从中学到,保持简单通常是最好的方法。

你的解决方案几乎可以奏效。服务器控件只能存在于服务器窗体的范围内,您需要在页面上执行递归搜索或直接查看窗体控件集合。一旦有了DropDownList并将其包装在一个div容器中,就需要将其添加到controls集合中

另外,我认为最好在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);
}
protectedoverride void OnPreInit(EventArgs e)
{
基于preinit(e);
var j=0;
foreach(form1.Controls.OfType().ToList()中的DropDownList控件)
{
var div=新的HtmlGenericControl();
div.ID=“div”+j;
div.TagName=“div”;
div.Attributes[“class”]=“myClass”;
div.Controls.Add(control);//或control.Controls.Add(div);但这不会包装它。
j++;
表1.控件.添加(div);
}
}


我希望这是有帮助的。让我知道你进展如何。

我打赌这会奏效,但在我的项目中,我无法引用form1,因为它在另一个母版页中。由于这是一个已经存在的后端安装插件,我不能真正改变这一点。