gpt4 book ai didi

c# - 带有内容模板的 ASP.NET 自定义控件

转载 作者:行者123 更新时间:2023-11-30 16:22:15 26 4
gpt4 key购买 nike

我在 ASP.NET 3.5 中创建了 LoginView ASP.NET 控件的“克隆”,以满足我们公司的需要,我试图了解它如何实现在不同模板中设置具有相同 ID 的控件的能力。例如,这是带有 LoginView 控件的 ASPX 标记:

    <asp:LoginView ID="lv" runat="server">
<AnonymousTemplate>
<asp:Label ID="lbl" runat="server" />
</AnonymousTemplate>
<LoggedInTemplate>
<asp:Label ID="lbl" runat="server" />
</LoggedInTemplate>
</asp:LoginView>

这是有效的标记,页面工作正常。
现在我创建了自定义控件:

    [ParseChildren(true)]
[PersistChildren(false)]
public class ContentControl : Panel
{
[PersistenceMode(PersistenceMode.InnerProperty)]
public PlaceHolder AnonymousView { get; set; }

[PersistenceMode(PersistenceMode.InnerProperty)]
public PlaceHolder LoggedinView { get; set; }

public ContentControl()
{
this.Init += new EventHandler(ContentControl_Init);
}

void ContentControl_Init(object sender, EventArgs e)
{
if (AnonymousView == null)
{
AnonymousView = new PlaceHolder();
}

if (LoggedinView == null)
{
LoggedinView = new PlaceHolder();
}

this.Controls.Add(AnonymousView);
this.Controls.Add(LoggedinView);

AnonymousView.ID = "AnonymousView";
LoggedinView.ID = "LoggedinView";

AnonymousView.Visible = !MyContext.IsLogged;
LoggedinView.Visible = MyContext.IsLogged;
}
}

现在,当我将我的控件与以下标记一起使用时,我收到错误消息,即 ID 为“lbl”的控件在页面上存在不止一次:

    <TL:ContentControl ID="c" runat="server" CssClass="dd">
<AnonymousView>
AnonymousView
<asp:Label ID="lbl" runat="server" />
</AnonymousView>
<LoggedinView>
LoggedinView
<asp:Label ID="lbl" runat="server" />
</LoggedinView>
</TL:ContentControl>

我如何允许在两个模板中使用具有相同 ID 的控件?

最佳答案

您需要开发模板化控件:Building Templated Custom ASP.NET Server Controls

并使用实现 INamingContainer 的控件作为模板容器:Use TemplateInstance.Single to avoid FindControls

关于c# - 带有内容模板的 ASP.NET 自定义控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12618726/

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