ViewBag возвращает ноль в классе расширений

Я хочу использовать свой 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? Потому что некоторые другие функции имеют логику, и мы хотим поделиться ею между собой.

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

7 голосов | спросил dlanglois6 9 FriEurope/Moscow2011-12-09T22:21:29+04:00Europe/Moscow12bEurope/MoscowFri, 09 Dec 2011 22:21:29 +0400 2011, 22:21:29

1 ответ


0

При использовании 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 в контроллере, тогда ваш оригинальный метод расширения также должен работать.

ответил nemesv 10 SatEurope/Moscow2011-12-10T02:10:11+04:00Europe/Moscow12bEurope/MoscowSat, 10 Dec 2011 02:10:11 +0400 2011, 02:10:11

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132