ViewBag возвращает ноль в классе расширений - PullRequest
7 голосов
/ 09 декабря 2011

Я хочу использовать свой ViewBag в моем _Layout, потому что все мои представления имеют схожие данные. Итак, что я делаю:

На мой взгляд:

ViewBag.MetaKeywords = Model.MetaKeywords

У меня есть класс расширения, связанный с HtmlHelper

public static string MetaKeywords(this HtmlHelper helper)
{
    return helper.ViewContext.Controller.ViewBag.MetaKeyWords;
}

И в моем _Layout:

@Html.MetaKeywords()

Проблема в том, что мой метод расширения возвращает ноль. Почему я использую метод расширения вместо @ViewBag.MetaKeyWords? Потому что некоторые другие функции имеют логику, и мы хотим поделиться ею между собой.

Спасибо за вашу помощь.

1 Ответ

5 голосов
/ 10 декабря 2011

При использовании Razor свойства ViewBag/ViewData, которые были установлены в представлении, могут быть доступны с помощью helper.ViewData вместо helper.ViewContext. ...:

 public static string MetaKeywords(this HtmlHelper helper)
 {
     return (string) helper.ViewData["MetaKeyWords"];
 }

Примечание. ViewBag - это просто динамическая оболочкавокруг словаря ViewData.

Или, если вы выполните ViewBag.MetaKeywords = Model.MetaKeywords в контроллере, тогда ваш оригинальный метод расширения также должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...