代码之家  ›  专栏  ›  技术社区  ›  Zack Peterson

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

  •  4
  • Zack Peterson  · 技术社区  · 16 年前

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

    我想在我的主页上做这样的事情。。。

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

    但是,我发现这个错误:

    “Model”不是 '系统.Web.UI.Page'


    更新

    服务器标记不能包含<%。。。%> 构造。

    必须使用If…Then代替。

    2 回复  |  直到 16 年前
        1
  •  10
  •   Zhaph - Ben Duguid    15 年前

    你不能那样做。您需要做的是设置母版页视图模型,如下所示:

    Inherits="System.Web.Mvc.ViewMasterPage<BaseModel>"
    

    ……哪里 BaseModel 是将在每个视图中使用的基类。因为这个限制,它很脆弱,你可能不想这么做。

    在母版页中,您只需执行以下操作:

    <%= Model.ShowMenu %>
    

    另一个选项是使用ViewData字典,并有一个合理的默认值,以防操作没有设置它。

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

    这很难看,所以你可以选择使用一个助手:

    <% if(this.ShouldRenderMenu()) { %>
       .....
    <% } %>
    

    public static class MyExtensions
    {
       public static bool ShouldRenderMenu(this ViewMasterPage page)
       {
          return (bool)(page.ViewData["rendermenu"] ?? false);
       }
    }
    
        2
  •  0
  •   Community CDub    8 年前

    我不知道他为什么删了,但是 Rajesh Pillai 他的回答很有效:

    Me.ViewData.Model.ShowMenu