对于初学者来说,也许有人可以帮助更好地指出问题。在UserControl中使用泛型类型的正确方法是什么?
我正在试图完成:
下面是我想要实现的,只使用基本的工作部件,能够导出解决方案我一个非常简单的例子寻找。
我希望能够建立在.ascx.cs代码隐藏下列文件:
public partial class DynamicControl<T> : System.Web.UI.UserControl where T : class
{
public List<T> Items;
public void Add(T item) {
Items.Add(item);
}
}
.ascx文件中正确地引用这样的:
<% foreach (var item in Items) { %>
<p>item.Name</p>
<% } %>
而这个加载到一个有标签.aspx文件,像这样:
<custom:DynamicControl ID="DynamicControl1" ItemType="Person" runat="server" />
甚至在.aspx.cs的代码隐藏:
DynamicControl1.ItemType = Type.GetType("Person");
真的,无论什么都可能。
我只需要一种通过我的网站创建通用用户控件的方式,我可以以编程方式(或在标签中)设置项目类型,并使用它同时处理.ascx.cs和.ascx文件,以及引用.aspx文件。
我已经试过:
1)创建DynamicControlBuilder
和继承ControlBuilder
类,然后附加此为使用[ControlBuilder(typeof(DynamicControlBuilder))]
的属性。结果使得控件不会将泛型类型添加到.aspx.designer.cs文件中,并且.ascx文件也不知道如何呈现。
2)创建使用泛型类型的DynamicControl
类的内部属性,但我找不到一个好的解决方案,类似DynamicControl<dynamic>
或类似的东西沿着这些行的东西 - 因为显然对象wouldn'在这一点上兼容,我不会得到任何自动完成或编译时错误处理。 3)使用类似于Add<T>(T item) where T : class
的方法,例如,目前我正在做的是...但是如果我想将大量项目添加到单个控件,这只会变得很难看。我不希望开发人员每次都必须重新声明每种方法的类型。它也不能解决那里存在的问题,这意味着我从那里得不到任何自动完成,这也是丑陋的。
预先感谢您!
这是为什么标签WPF ? –
我想不出一个更合适的UserControl标签,我相信它们通常与WPF相关联。如果它不是问题的最佳标记,我很乐意将其删除。 – bdrelling
如果你定义类型如'DynamicFooControl:DynamicControl {}','DynamicBarControl:DynamicControl {}'等等,该怎么办? –
supercat