2013-06-28 4 views
0

Я выполнил инструкции в this blog post, чтобы создать сильно типизированную модель для моего файла _layout.cshtml, потому что я ненавижу использование ViewBag. Вот мой базовый контроллер, что все мои другие контроллеры наследуют от:Мой макет не узнает мой объект BaseModel

public class BaseController : Controller 
{ 
    protected BaseViewModel ModelBase { get; private set; } 

    protected override void OnResultExecuting(ResultExecutingContext filterContext) 
    { 
     var contextItems = filterContext.HttpContext.Items; 
     if (contextItems["ModelBase"] == null) 
      filterContext.HttpContext.Items["ModelBase"] = this.ModelBase; 

     base.OnResultExecuting(filterContext); 
    } 

    protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     this.ModelBase = new BaseViewModel 
     { 
      Theme = Request.QueryString["theme"] ?? "cyborg" 
     }; 
     base.OnActionExecuting(filterContext); 
    } 
} 

Все, что я пытаюсь сделать, это взять переменные строки запроса под названием «тема» и добавить его значение свойства Темы на BaseViewModel. Согласно сообщению в блоге, я должен иметь возможность делать @ModelBase.Theme в макете, но я не получаю intellisense, и он вызывает ошибку при запуске.

ответ

0

Вы должны использовать @model BaseViewModel, чтобы сильно набирать модель на виду. Затем вы можете использовать @Model.Theme

+0

Все, что делает введите вид 'BaseViewModel'. Модель фактически не заполняется. Помните, что это макет. – Chev