vb.net 根据用户是否登录在asp.net中隐藏或显示菜单项
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/21563901/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Hiding or showing menu item in asp.net based on whether user is logged in or not
提问by Kevin
I need to make a change to a website's menu system which is written in asp.net and vb.net. I would like to hide the menu item (Value="ProdinTran") from being seen when a user is not logged into the site. Can you show me what I need to add to this code to do this?
我需要对用asp.net 和vb.net 编写的网站菜单系统进行更改。我想在用户未登录站点时隐藏菜单项 (Value="ProdinTran")。你能告诉我我需要在这段代码中添加什么来做到这一点吗?
Here is the current code:
这是当前的代码:
<%@ Master Language="VB" AutoEventWireup="false" CodeFile="Site.Master.vb" Inherits="Site" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head runat="server">
<title></title>
<link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />
<asp:ContentPlaceHolder ID="HeadContent" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form runat="server">
<div class="page">
<div class="header">
<div class="title">
<h1>
Portal
</h1>
</div>
<div class="loginDisplay">
<asp:LoginView ID="HeadLoginView" runat="server" EnableViewState="false">
<AnonymousTemplate>
[ <a href="~/Account/Login.aspx" ID="HeadLoginStatus" runat="server">Log In</a> ]
</AnonymousTemplate>
<LoggedInTemplate>
Welcome <span class="bold"><asp:LoginName ID="HeadLoginName" runat="server" /> </span>!
[ <asp:LoginStatus ID="HeadLoginStatus" runat="server" LogoutAction="Redirect" LogoutText="Log Out" LogoutPageUrl="~/"/> ]
</LoggedInTemplate>
</asp:LoginView>
</div>
<div class="clear hideSkiplink">
<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal" DisappearAfter="1000">
<Items>
<asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home">
<asp:MenuItem NavigateUrl="~/Default.aspx" Text="Portal Home Page"
Value="Portal Home Page"></asp:MenuItem>
<asp:MenuItem NavigateUrl="http://www.something.com/index.php?option=com_content&view=article&id=212&Itemid=28" Text="About"
Value="About" Target="_parent"></asp:MenuItem>
<asp:MenuItem NavigateUrl="http://www.something.com"
Text="Web Site"
ToolTip="Home Page" Value="Home" Target="_parent">
</asp:MenuItem>
</asp:MenuItem>
<asp:MenuItem Text="Customer" Value="Customer"
ToolTip="Registered customers" NavigateUrl="~/Customer.aspx?mySelect=0">
<asp:MenuItem NavigateUrl="~/Customer.aspx?mySelect=0"
Text="Customer Home Page" Value="Chp">
</asp:MenuItem>
<asp:MenuItem NavigateUrl="~/Customer.aspx?mySelect=2"
Text="Open Orders"
ToolTip="View your open orders" Value="OpenOrders">
</asp:MenuItem>
<asp:MenuItem NavigateUrl="~/Customer.aspx?mySelect=3"
Text="Canceled Orders"
ToolTip="View your canceled orders" Value="Canceled">
</asp:MenuItem>
<asp:MenuItem NavigateUrl="~/Customer.aspx?mySelect=4"
Text="Shipped Orders"
ToolTip="View your shipped orders" Value="Shipped">
</asp:MenuItem>
<asp:MenuItem Text="Product in Transit" ToolTip="Product in Transit" Value="ProdinTran" NavigateUrl="http://www.google.com">
</asp:MenuItem>
<asp:MenuItem NavigateUrl="~/Customer.aspx?mySelect=5"
Text="Invoices"
ToolTip="View your invoices" Value="Invoices">
</asp:MenuItem>
<asp:MenuItem NavigateUrl="~/Customer.aspx?mySelect=6"
Text="Credit Memos"
ToolTip="View your credit memos" Value="Credits">
</asp:MenuItem>
<asp:MenuItem NavigateUrl="~/Account/ChangePassword.aspx"
Text="Change Password" ToolTip="Change your password."
Value="Change">
</asp:MenuItem>
</asp:MenuItem>
<asp:MenuItem Text="Help & Information"
ToolTip="Holidays, Shipping, Passwords" Value="Help">
<asp:MenuItem Text="Terms & Conditions"
ToolTip="View Terms & Conditions"
Value="Terms" NavigateUrl="http://www.something.com/terms.html"
Target="_parent">
</asp:MenuItem>
<asp:MenuItem Text="Holiday Schedule"
ToolTip="View Holiday Schedule"
Value="Holiday" NavigateUrl="~/Holiday.aspx"></asp:MenuItem>
<asp:MenuItem Text="Shipping Company Information"
ToolTip="View information on shipping companies"
Value="Shipping" NavigateUrl="~/Shipping.aspx"></asp:MenuItem>
<asp:MenuItem NavigateUrl="~/Forgot.aspx" Text="Reset My Password"
ToolTip="Reset your password." Value="Reset">
</asp:MenuItem>
<asp:MenuItem NavigateUrl="~/HowDoI.aspx" Text="How Do I Access my info?"
ToolTip="See how to register, logon, reset your password, change your password and access your account." Value="Retrieve">
</asp:MenuItem>
<asp:MenuItem Text="Register "
ToolTip="Click here to register on this site"
Value="Register2" NavigateUrl="~/Account/Register.aspx"></asp:MenuItem>
</asp:MenuItem>
<asp:MenuItem NavigateUrl="~/Remnant1.aspx" Text="Remnants"
Value="Remnants"></asp:MenuItem>
</Items>
</asp:Menu>
</div>
</div>
<div class="main">
<asp:ContentPlaceHolder ID="MainContent" runat="server"/>
</div>
<div class="clear">
</div>
</div>
<div class="footer">
© 2014 - All Rights Reserved<br />
</div>
</form>
</body>
</html>
Thank you in advance for your help!
预先感谢您的帮助!
采纳答案by Kevin
VB.NET placed in Site.master.vb:
VB.NET 放置在 Site.master.vb 中:
Partial Class Site
Inherits System.Web.UI.MasterPage
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If Not HttpContext.Current.User.Identity.IsAuthenticated Then
NavigationMenu.FindItem("Customer").ChildItems.Remove(NavigationMenu.FindItem("Customer,ProdinTran"))
End If
End Sub
End Class
回答by mason
I wrote an extension method to find Menu Item by value.
我写了一个扩展方法来按值查找菜单项。
C#
C#
public static class ExtensionMethods
{
public static System.Web.UI.WebControls.MenuItem GetMenuItemByValue(this System.Web.UI.WebControls.Menu menu, string ItemValue)
{
foreach (System.Web.UI.WebControls.MenuItem item in menu.Items)
{
if (item.Value == ItemValue)
{
return item;
}
}
return null;
}
}
VB.NET
网络
Public NotInheritable Class ExtensionMethods
Private Sub New()
End Sub
<System.Runtime.CompilerServices.Extension> _
Public Shared Function GetMenuItemByValue(menu As System.Web.UI.WebControls.Menu, ItemValue As String) As System.Web.UI.WebControls.MenuItem
For Each item As System.Web.UI.WebControls.MenuItem In menu.Items
If item.Value = ItemValue Then
Return item
End If
Next
Return Nothing
End Function
End Class
So then I could do something like..
那么我可以做类似的事情..
C#
C#
protected void Page_Load(object sender, EventArgs e)
{
if(!User.IsAuthenticated)
{
NavigationMenu.GetMenuItemByValue("ProdinTran").Visible=false;;
}
}
VB.NET
网络
Protected Sub Page_Load(sender As Object, e As EventArgs)
If Not User.IsAuthenticated Then
NavigationMenu.GetMenuItemByValue("ProdinTran").Visible = False
End If
End Sub

