【问题标题】:ASP.NET MVC Master Page: "'Model' is not a member of 'System.Web.UI.Page'"ASP.NET MVC 母版页:“‘模型’不是‘System.Web.UI.Page’的成员”
【发布时间】:2009-04-28 13:24:24
【问题描述】:

My View 被强类型化为具有布尔属性 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>

但是,我得到了这个错误:

“模型”不是 'System.Web.UI.Page'

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


更新

哎呀:

服务器标签不能包含 构造。

必须改用 If...Then。

【问题讨论】:

  • 您的母版页文件声明是什么?

标签: asp.net-mvc master-pages


【解决方案1】:

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

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

...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】:

我不确定他为什么删除它,但Rajesh Pillai 的回答有效:

Me.ViewData.Model.ShowMenu

【讨论】:

  • 除非母版页具有包含成员 ShowMenu 的模型类型,否则这不起作用。
猜你喜欢
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多