gpt4 book ai didi

asp.net - 覆盖母版页上控件中的功能

转载 作者:行者123 更新时间:2023-12-02 21:16:43 25 4
gpt4 key购买 nike

场景:网站上的每个页面顶部都会有一个由许多按钮组成的菜单栏。某些页面具有相同数量的按钮,执行相同的操作(例如重定向到页面),但某些按钮取决于页面上当前的信息。问题:我希望能够覆盖控件上的按钮,以便我可以按页面处理它。我也在想也许使用事件并以这种方式处理它会更容易。这两种方法是否可行?如果不可行,是否有替代方案?

我目前拥有的代码如下

在aspx页面

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
Dim myMenu As MenuBar
myMenu = CType(Master.FindControl("MenuBar1"), MenuBar)
myMenu.ShowButtons(MenuBar.Buttons.NewOrganization, MenuBar.Buttons.NewEquipment, MenuBar.Buttons.ChangeEquipmentOwner, MenuBar.Buttons.ChangeEquipmentLocation)

End If
End Sub

ascx 控件

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
RaiseEvent myEvent(sender, e)
End If
End Sub
Public Sub ShowButtons(ByVal ParamArray args() As Buttons)
For i As Integer = 0 To args.GetUpperBound(0)
SetVisible(args(i))
Next
End Sub
Public Enum Buttons
NewOrganization = 1
NewEquipment = 2
ChangeEquipmentOwner = 3
ChangeEquipmentLocation = 4
UnderDevelopment = 5
CheckoutEquipment = 6
EditDocument = 7
CreateEquipmentLoanForm = 8
End Enum
Private Sub SetVisible(ByVal btn As Buttons)
Select Case (btn)
Case 1
btnNewOrganization.Visible = True
Case 2
btnNewEquipment.Visible = True
Case 3
btnChangeOwner.Visible = True
Case 4
btnChangeLocation.Visible = True
Case 5
btnUnderDevelopment.Visible = True
Case 6
btnCheckoutEquipment.Visible = True
Case 7
btnEditDocument.Visible = True
Case 8
btnCreateEquipment.Visible = True
End Select
End Sub

最佳答案

我要做的是在母版页上使用内容占位符,该内容占位符将为菜单控件之类的内容保留。每个页面都可以提供菜单控制。

使用此技术将使每个页面能够根据所需效果定制控件,而无需耦合母版页/页面逻辑。不仅如此,每个页面都不会与您在母版页上使用的 1 个控件结合。您可能有时希望包含另一个菜单控件或完全不同的菜单控件,而不影响任何其他页面。

但是如果您绝对必须从内容页与母版页进行交互,并且您不接受我的想法,您可以使用 C# 来执行此操作(但在您的情况下可以轻松地适应 VB.NET):

母版页代码隐藏

请务必在母版页代码隐藏中添加一个方法,如下所示:

public void updateMenuControlWithOptions(MenuOptions options)
{
//Tailor your menu control based on provided options
//Menu1.FooButton.Visible = options.FooButtonVisible;
}

ASPX

请务必将以下指令添加到页面中。您很快就会明白为什么这会有所帮助,并将我的母版页名称更改为您的:

<%@ MasterType VirtualPath="~/Main.Master" %>

ASPX 代码隐藏

if (foo)
whateverOptions.FooButtonVisible = true;

this.Master.updateMenuControlWithOptions(whateverOptions);

请注意,我不必对 master 进行类型转换。这是因为我在 aspx 中包含了 MasterType 指令。

关于asp.net - 覆盖母版页上控件中的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11055939/

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