C# 我对ASP.NET用户控件有问题
我目前有一个无法解决的问题。我有一个名为“Dashboard”的用户控件,它有以下标记,包含几个子控件C# 我对ASP.NET用户控件有问题,c#,.net,asp.net,user-controls,C#,.net,Asp.net,User Controls,我目前有一个无法解决的问题。我有一个名为“Dashboard”的用户控件,它有以下标记,包含几个子控件 <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Dashboard.ascx.cs" Inherits="BlueSEQ.Controls.Dashboard.Dashboard" %> <%@ Register src="Administrator.ascx" tagname="Administrat
<%@ 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" />
<% } %>
如您所见,我希望它根据某些条件显示一些控件或其他控件。然而,所有这些控件的“加载”事件都会被触发,即使它们没有被使用
如何防止这种情况发生?您必须在特定条件下加载控件,因此尝试使用usercontrol设置
可见/不可见
,这是一种更好的方法
<% if (isAdministrator)
{ %>
Page.LoadControl(("~\Administrator1.ascx");
<% }
Page.LoadControl((“~\Administrator1.ascx”);
如果可以,请尽量避免在标记中使用条件逻辑。这可能会使设计人员(如果您与设计人员一起工作)更难理解视图,并且在将来更难找到和重构此代码
您还应该看看。虽然它是ASP.NET MVC,但它仍然是一个很好的例子,说明了向视图中添加逻辑会使视图很快变得很难维护且不易维护(初始示例)
您可以使用此处描述的技术:如何:
您的标记看起来像这样
<asp:PlaceHolder id="MyPlaceholder" />
使用多视图控件怎么样?
实现这一点的理想方法是设置asp.net角色提供程序并使用LoginView控件,这与下面的代码大致相同。LoginView仅加载适当的内容
<asp:LoginView runat="server">
<AnonymousTemplate>
<uc1:User ID="User" runat="server" />
</AnonymousTemplate>
<RoleGroups>
<asp:RoleGroup Roles="Administrator">
<ContentTemplate>
<uc1:Administrator ID="Administrator1" runat="server" />
</ContentTemplate>
</asp:RoleGroup>
<asp:RoleGroup Roles="Provider">
<ContentTemplate>
<uc1:Provider ID="Provider" runat="server" />
</ContentTemplate>
</asp:RoleGroup>
</RoleGroups>
</asp:LoginView>
我认为MultiView
仍将加载所有控件,并在其上运行至少部分事件。
<asp:LoginView runat="server">
<AnonymousTemplate>
<uc1:User ID="User" runat="server" />
</AnonymousTemplate>
<RoleGroups>
<asp:RoleGroup Roles="Administrator">
<ContentTemplate>
<uc1:Administrator ID="Administrator1" runat="server" />
</ContentTemplate>
</asp:RoleGroup>
<asp:RoleGroup Roles="Provider">
<ContentTemplate>
<uc1:Provider ID="Provider" runat="server" />
</ContentTemplate>
</asp:RoleGroup>
</RoleGroups>
</asp:LoginView>