asp.net-mvc - ASP.NET MVC 母版页 : "' Model' is not a member of 'System.Web.UI.Page' "

标签 asp.net-mvc master-pages

我的 View 被强类型化为具有 bool 属性 ShowMenu 的 ADO.NET Entity Framework 类。

<%@ 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' is not a member of 'System.Web.UI.Page'



如何从其母版页访问 View 的模型?

更新

哎呀:

Server tags cannot contain <% ... %> constructs.



必须使用 If...Then 代替。

最佳答案

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

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

...哪里BaseModel是您将在每个 View 中使用的一些基类。由于此限制,它非常脆弱,您可能不想这样做。

在任何情况下,每个 View 都必须具有派生自 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);
   }
}

关于asp.net-mvc - ASP.NET MVC 母版页 : "' Model' is not a member of 'System.Web.UI.Page' ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/797916/

相关文章:

asp.net-mvc - 将 ASP.NET MVC2 项目升级到 MVC3 并使用混合 View 引擎

c# - 从下拉列表中选择值时如何回发到 Controller 功能

asp.net - 如何在 ASP.NET MVC 中禁用 HTTP Keep-Alive?

asp.net - 使用 '#' 识别 master/content/css 页面组合中的标签时出现问题

html - vs2008 可以禁用自动格式化吗?

c# - 如何以编程方式向 contentPlaceHolder 添加内容?

asp.net - 在 asp.net c# 中添加母版页后,MySql 主机出错

c# - 如何在页面加载时动态更改 aspx 页面的标题

c# - 在 MasterPage 中使用 javascript 验证文本框

c# - asp.net mvc/Sql 双寄存器