仅为登录用户显示菜单项

Pet*_*lly 11 asp.net-mvc

我是ASP.NET MVC的新手,正在使用该框架的1.0版本.我有一个site.master页面,其中包含以下硬编码菜单

<div id="menucontainer">
    <ul id="menu">              
    <li><%= Html.ActionLink("Home", "Index", "Home")%></li>
    <li><%= Html.ActionLink("Drivers", "List/?category=Drivers", "Product")%></li>
    <li><%= Html.ActionLink("Irons", "List/?category=Irons", "Product") %></li>
    <li><%= Html.ActionLink("Wedges", "List/?category=Wedges", "Product") %></li>
    <li><%= Html.ActionLink("Putters", "List/?category=Putters", "Product") %></li> 
    </ul>  
 </div>
Run Code Online (Sandbox Code Playgroud)

我想在用户登录时在菜单上显示一个额外的项目.像"查看我的房源"之类的东西.我以肮脏的hacky方式做这件事没问题,所以我试过了

<% if (User.Identity.IsAuthenticated) ...
Run Code Online (Sandbox Code Playgroud)

User在这种情况下无效.我的问题是如何仅在用户登录时显示额外的菜单项?

mar*_*ind 11

您可以通过Context对象访问User对象:

<% if(Context.User.Identity.IsAuthenticated) ...
Run Code Online (Sandbox Code Playgroud)


Pet*_*lly 10

我也刚刚发现我可以使用

<% if (Request.IsAuthenticated) { %>
  <li><%= Html.ActionLink("View my Listings", "MyListings", "List")%>
<% } %>
Run Code Online (Sandbox Code Playgroud)


Rog*_*ger 7

对于MVC 4+我们喜欢这样:

@if(Context.User.Identity.IsAuthenticated) {
     <li> @Html.ActionLink(... 
   }
Run Code Online (Sandbox Code Playgroud)