Главная страница ASP.NET MVC: «Модель» не является членом «System.Web.UI.Page» - PullRequest
4 голосов
/ 28 апреля 2009

Мой вид строго типизирован для класса ADO.NET Entity Framework с логическим свойством ShowMenu.

<%@ 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'

Как я могу получить доступ к модели представления с его главной страницы?


Обновление

Oops:

Теги сервера не могут содержать <% ...%> конструкции.

Нужно использовать If ... Тогда вместо этого.

Ответы [ 2 ]

10 голосов
/ 28 апреля 2009

Вы не можете этого сделать. Что вам нужно сделать, это установить модель представления главной страницы, например:

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);
   }
}
0 голосов
/ 28 апреля 2009

Я не уверен, почему он удалил его, но Rajesh Pillai ответ работает:

Me.ViewData.Model.ShowMenu
...