[英]get and set parameters from LoadControl(string path) in c#
我想基于XML向页面添加用户控件:
<?xml version="1.0" encoding="utf-8" ?>
<Fields>
<Group name="Main" text="Innhold">
<Field type="TextBox" name="Name" text="Navn"></Field>
</Group>
</Fields>
用户控件如下所示:TextBox.ascx:
<div class="fieldWrapper">
<asp:Label runat="server"><%=Label %></asp:Label>
<asp:TextBox ID="TextBox1" runat="server" />
</div>
我基于xml中的type属性执行LoadControl。 就像:LoadControl(type +“ .ascx”):
var fields = from x in element.Elements("Field") select new
{
type = x.Attribute("type").Value,
name = x.Attribute("name").Value,
text = x.Attribute("text").Value,
};
foreach (var field in fields)
{
var control = LoadControl("~/UserControls/FieldControls/" + field.type + ".ascx");
pnl.Controls.Add(control);
}
FieldsHolder.Controls.Add(pnl);
我想将文本属性从xml传递到TextBox.ascx中的Label。 像这样:ctrl.Label = field.text我知道我是否将控件转换为正确的类型,我可以做到这一点,但是我不知道类型。 我可以通过这种方式使用反射吗?
我假设您的所有UserControl都具有相同的属性,例如“标签”。 我会创建一个如下所示的界面
public interface IUserControl
{
string Label { get; set; }
}
这是UserControl的实现
码
public partial class TextBox : System.Web.UI.UserControl, IUserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
private string _label;
public string Label
{
get { return _label; }
set { _label = value; }
}
}
您现在可以像下面那样加载控件并设置属性
foreach (var field in fields)
{
var control = LoadControl("~/UserControls/FieldControls/" + field.type + ".ascx");
(control as IUserControl).Label = field.text;
pnl.Controls.Add(control);
}
我希望它可以帮助您实现所需的目标。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.