gpt4 book ai didi

c# - 如何使属性可声明为 ASP.NET 标记中的任何继承类型?

转载 作者:太空宇宙 更新时间:2023-11-03 11:50:43 25 4
gpt4 key购买 nike

我在 ASP.NET 中看到过各种带有对象“集合”的控件,您可以使用标记来定义这些对象。例如:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<Triggers>
<asp:PostBackTrigger ControlID="MyButton" />
</Triggers>
...
</asp:UpdatePanel>

在上面的示例中,您可以添加任意数量的触发器,并且它们可以是扩展 UpdatePanelTrigger 的任何类型。我想做类似的事情,但只有一个项目而不是一个集合:

<app:PortalLink ID="DrinkLink" Text="I am thirsty">
<portal:ViewProductsRequest ProductCategory="Drinks" />
</app:PortalLink>
--or--
<app:PortalLink ID="DrinkLink">
<Content>I am thirsty</Content>
<Request>
<portal:ViewProductsRequest ProductCategory="Drinks" />
</Request>
</app:PortalLink>

这个想法是可以为 Request 提供继承特定接口(interface)或类的任何类型的单个对象。有什么办法吗?

更新

澄清一下,我希望 PortalLink 能够接受作为请求子类的任何内容,它表示特定页面接受的参数。例如:

public class AdminMenuRequest : Request
{} // No parameters for the main menu page.
public class ViewProductsRequest : Request
{
public string ProductCategory {get;set;}
public bool? ShowOutOfStock {get;set;}
}

在标记中:

<app:PortalLink runat="server" Text="I am an administrator">
<portal:AdminMenuRequest />
</app:PortalLink>
<app:PortalLink runat="server" Text="I am thirsty">
<portal:ViewProductsRequest ProductCategory="Drinks" />
</app:PortalLink>

到目前为止,我已经弄清楚我可以让 Requests 控制自己,或者让 PortalLinks 接受请求的集合(但不限于单个请求)。如果我制作 Requests 控件,它有点打破单一用途规则:请求代表服务器端的请求和客户端的链接。另外,因为我想每个“页面”有一个请求,所以在大多数情况下它也会最终污染智能感知列表。如果我让 PortalLinks 接受一组请求,那么我可以简单地使用列表中的第一项而忽略其余的。这行得通,但如果能够强制每个 PortalLink 都应该有一个(且只有一个)值,那就太好了。在代码隐藏中创建或初始化链接时能够说:

((ViewProductsRequest)FoodOrDrinkLink.Request).ShowOutOfStock = OOSCheckBox.Checked;

这是我可以用额外的属性来伪造的东西,但我希望有一些更优雅的东西。

最佳答案

看这里:Web Control Collection Property Example

编辑:对于“简单”属性,除了在控件类中创建一个公共(public)属性外,您不需要任何其他东西,但您必须稍后将其用作标记属性(并且不是作为内部属性):

public partial class UCSample : UserControl
{
public string MyCustomProperty { get; set; }

protected void Page_Load(object sender, EventArgs e)
{
Response.Write(this.MyCustomProperty);
}
}

<%@ Page Language="C#" %>
<%@ Register src="UCSample.ascx" tagname="UCSample" tagprefix="uc1"%>

<uc1:UCSample ID="UCSample1" runat="server" MyCustomProperty="StackOverflow" />

关于c# - 如何使属性可声明为 ASP.NET 标记中的任何继承类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2188517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com