通用(即) 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。

通用(即<T>) web用户控件的语法

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;
...