您可以将泛型类型抽象化,然后继承一个具体类型,然后您可以将其放置在页面上。一方面,这是更多的代码,但它也允许您通过调用基本构造函数来自定义类型。
public abstract class MyGenericControl<T> : WebControl {
...
public T SomeStronglyTypedProperty { get; set; }
protected MyGenericControl(...) {
...
}
...
}
public sealed class MyConcreteControl : MyGenericControl<SomeType> {
public MyConcreteControl()
: base(
...
) {
}
}
在您的标记中:
<%@ Page ... %>
<%@ Register assembly="MyAssembly" namespace="MyNamespace" tagPrefix="abc" %>
<asp:Content ...>
<abc:MyConcreteControl id="myConcreteControl" runat="server" />
</asp:Content>
然后在你后面的代码中:
...
SomeType value = GetAValue();
myConcreteControl.SomeStronglyTypedProperty = value;
...