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)
| 归档时间: |
|
| 查看次数: |
2278 次 |
| 最近记录: |