通用(即) web用户控件的语法
本文关键字:用户 web 控件 语法 通用 | 更新日期: 2023-09-27 18:11:50
假设我已经做了如下的web控件:
public class TestControl<T> : WebControl
{
...
}
是否有任何方法可以将该控件放在.aspx页面上,而无需通过代码进行操作?我真的很想做这样的事情:
<controls:TestControl<int> runat="server" />
但是据我所知,我没有办法传入泛型参数。我试着在网上搜索,发现这个http://forums.asp.net/t/1309629.aspx,这似乎正是我所追求的,但似乎没有人掌握这家伙想要什么,我找不到任何类似的StackOverflow。
No。这是不可能的
没有。你最好的选择是将其作为基础并从中获得更多直接控制,例如TestIntControl
, TestStringControl
等等。我知道这违背了纯泛型的目的,但是您几乎没有其他选择。然后,您可以在需要显式标记的地方使用这些类型,并且在更动态的页面中仍然具有基础类型的灵活性。
您可以使泛型类型抽象,并继承一个具体类型,然后将其放置在页面上。一方面,这是多了一些代码,但它也允许您通过调用基构造函数来定制类型。
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;
...