我遇到ASP .NET用户控件的问题

Mat*_*zen 3 .net c# asp.net user-controls

我目前有一个问题,我无法解决.我有一个名为"Dashboard"的用户控件,它有以下标记,包含几个子控件.

<%@ 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" />
<% } %>
Run Code Online (Sandbox Code Playgroud)

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

我怎么能阻止这个?

R0M*_*RMY 5

如果您可以提供帮助,请尽量避免在标记中使用条件逻辑.它可能使设计人员更难理解这些视图(如果您正在与设计人员合作),并且将来更难以找到并重构此代码.

您还应该看看ASP.NET MVC:避免使用标记汤.虽然它是ASP.NET MVC,但它仍然是一个很好的例子,说明如何在视图中添加逻辑可以快速地使它们变得非常困难和令人不愉快(初始示例).


您可以使用此处描述的技术:如何:以编程方式将控件添加到ASP.NET网页.

你的标记看起来像这样.

<asp:PlaceHolder id="MyPlaceholder" />
Run Code Online (Sandbox Code Playgroud)

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

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);
}
Run Code Online (Sandbox Code Playgroud)