gpt4 book ai didi

c# - 动态创建不同类型的 Web 控件

转载 作者:行者123 更新时间:2023-11-30 17:06:24 25 4
gpt4 key购买 nike

英语不是我的母语;请原谅打字错误。

我正在创建一个调查类型的应用程序,但我不确定应该如何处理,所以我一直在进行一些试验和错误。

我有一个问题类

public class Question
{
public int QuestionID;
public string QuestionText;
public int InputTypeID;
public List<WebControl> Controls;

public Question()
{
//initialize fields;
}

internal Question(int id, string text, int inputTypeId)
{
//assign parameters to fields
switch(inputTypeId)
{
case 1:
//checkbox
break;
case 2:
//textbox
TextBox t = new TextBox();
Controls = new List<WebControl>();
Controls.Add(t);
break;
...
}
}
}

我的 Question.aspx 看起来像这样:

<asp:Repeater ID="repeater" runat="server">
<ItemTemplate>
//Want to display a control dynamically here
</ItemTemplate>
</asp:Repeater>

我试过了,但显然没用...

<asp:Repeater ID="repeater" runat="server">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "Controls") %>
</ItemTemplate>
</asp:Repeater>

我刚刚明白了。

System.Collections.Generic.List`1[System.Web.UI.WebControls.WebControl] System.Collections.Generic.List`1

一个问题可能有

  • 一个文本框
  • 单选按钮列表
  • 复选框列表

在这种情况下,我的问题类是否应该有 List<WebControl>或者只是 WebControl

另外,我怎样才能在转发器中呈现网络控件?

最佳答案

您应该在 CodeBehind 中使用 Repeater ItemDataBound() 事件执行此操作。你的问题类应该有一个 List<Control>这是 WebControl 和其他控件的基类,允许灵活地使用不同类型的控件。

不必使用 Page_Load 但仅作为示例,

   void Page_Load(Object Sender, EventArgs e) 
{
Repeater1.ItemDataBound += repeater1_ItemDataBound;
Repeater1.DataSource = [your List<Control> containing controls to add];
Repeater1.DataBind();
}

void Repeater1_ItemDataBound(Object Sender, RepeaterItemEventArgs e)
{

// Execute the following logic for Items and Alternating Items.
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{

var controlToAdd = (Control)e.Item.DataItem;
((PlaceHolder)e.Item.FindControl("PlaceHolder1")).Controls.Add(controlToAdd);

}
}

和 ItemTemplate:

   <ItemTemplate>
<asp:PlaceHolder id="PlaceHolder1" Runat="server" />
</ItemTemplate>

关于c# - 动态创建不同类型的 Web 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15395564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com