ASP.NET MVC母版页:"'Model'不是'System.Web.UI.Page'的成员"

Zac*_*son 4 asp.net-mvc master-pages

My View强类型为具有布尔属性ShowMenu的ADO.NET Entity Framework类.

<%@ Page ... MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of Thing)" %>
...
Run Code Online (Sandbox Code Playgroud)

我想在我的母版页上做这样的事......

<%@ Master ... Inherits="System.Web.Mvc.ViewMasterPage" %>
...
<div id="menu" runat="server" visible="<%= Me.Page.Model.ShowMenu %>">
    <asp:ContentPlaceHolder ID="MenuContent" runat="server" />
</div>
Run Code Online (Sandbox Code Playgroud)

但是,我收到此错误:

'Model'不是'System.Web.UI.Page'的成员

如何从主页面访问View的模型?


更新

哎呀:

服务器标记不能包含<%...%>结构.

必须使用If ...然后使用.

Ben*_*man 10

你不能这样做.您需要做的是拥有主页面视图模型集,如下所示:

Inherits="System.Web.Mvc.ViewMasterPage<BaseModel>"
Run Code Online (Sandbox Code Playgroud)

... BaseModel在每个单一视图中,您将使用的基类在哪里.因为这个限制,它非常脆弱,你可能不想这样做.

在任何情况下,每个视图都必须具有从BaseModel派生的模型类型.

然后在您的母版页中,您可以执行以下操作:

<%= Model.ShowMenu %>
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用ViewData字典,并在操作未设置时具有合理的默认值.

<% if( (bool)(ViewData["showmenu"] ?? false) ) { %>
    ... render menu here ...
<% } %>
Run Code Online (Sandbox Code Playgroud)

这非常难看,所以您可以选择使用帮助器:

<% if(this.ShouldRenderMenu()) { %>
   .....
<% } %>
Run Code Online (Sandbox Code Playgroud)

在你的帮手中:

public static class MyExtensions
{
   public static bool ShouldRenderMenu(this ViewMasterPage page)
   {
      return (bool)(page.ViewData["rendermenu"] ?? false);
   }
}
Run Code Online (Sandbox Code Playgroud)