gpt4 book ai didi

c# - 我在使用 ASP .NET 用户控件时遇到问题

转载 作者:行者123 更新时间:2023-11-30 13:40:50 25 4
gpt4 key购买 nike

我目前有一个无法解决的问题。我有一个名为“仪表板”的用户控件,它具有以下标记,其中包含几个子控件。

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Dashboard.ascx.cs" Inherits="BlueSEQ.Controls.Dashboard.Dashboard" %>
<%@ Register src="Administrator.ascx" tagname="Administrator" tagprefix="uc1" %>
<%@ Register src="Provider.ascx" tagname="Provider" tagprefix="uc2" %>
<%@ Register src="User.ascx" tagname="User" tagprefix="uc3" %>

<% if (isAdministrator)
{ %>
<uc1:Administrator ID="Administrator1" runat="server" />
<% }
else if (isProvider)
{ %>
<uc2:Provider ID="Provider1" runat="server" />
<% }
else
{ %>
<uc3:User ID="User1" runat="server" />
<% } %>

如您所见,我希望它根据某些条件显示某些控件或其他控件。但是,所有这些控件的“加载”事件都会被触发,即使它们未被使用也是如此。

我怎样才能避免这种情况?

最佳答案

如果可以的话,请尽量避免在标记中使用条件逻辑。这可能会使设计人员(如果您正在与设计人员一起工作)理解这些 View ,并且将来更难以找到和重构此代码。

您还应该看看 ASP.NET MVC: Avoiding Tag Soup .虽然它是 ASP.NET MVC,但它仍然是一个很好的例子,说明向 View 添加逻辑会如何迅速使它们变得非常难以维护且令人不快(初始示例)。


您可以使用此处描述的技术:如何:Add Controls to an ASP.NET Web Page Programmatically .

您的标记看起来像这样。

<asp:PlaceHolder id="MyPlaceholder" />

你的代码隐藏将有一些类似的东西

private void InitSection()
{
Control c;

if( isAdministrator )
c = Page.LoadControl("~\Administrator.ascx")
else if( isProvider )
c = Page.LoadControl("~\Provider.ascx")
else
c = Page.LoadControl("~\User.ascx");

MyPlaceholder.Controlls.Add(c);
}

关于c# - 我在使用 ASP .NET 用户控件时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6762116/

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