2016-06-29 3 views
0

Я следующие константы определена следующим образом:значения ASP MVC TempData в частичном виде ошибке

namespace MyProject.Constants 
{ 
    public static class AppConstants 
    { 
    // View Bag/Temp Data Constants 
    public const string CurrentAction = "CurrentAction"; 
    public const string CurrentController = "CurrentController"; 

    } 
} 

В моем файле _layout.cshtml я устанавливаю их следующим образом:

@using MyProject.Constants 
@{ 
    TempData[AppConstants.CurrentAction] = ViewContext.RouteData.GetRequiredString("action").ToLower(); 
    TempData[AppConstants.CurrentController] = ViewContext.RouteData.GetRequiredString("controller").ToLower(); 
} 
<!DOCTYPE html> 
<html> 
    ... 
    <body> 

     @Html.Partial("_SubNavigation") 

    </body> 
    </html> 

Но я м не в состоянии получить доступ к TempData внутри моей _SubNavigation.cshtml частичного вида:

<li><a href="@Url.Action("Index", "Home")" class="@(TempData[AppConstants.CurrentController].ToString() == "home" && TempData[AppConstants.CurrentAction].ToString() == "index" ? "active" : "")">Home</a></li> 

Я получаю ошибку The name 'AppConstants' does not exist in the current context

Если я добавлю следующий фрагмент непосредственно в частичный, то он работает?

@using MyProject.Constants 
@{ 
    TempData[AppConstants.CurrentAction] = ViewContext.RouteData.GetRequiredString("action").ToLower(); 
    TempData[AppConstants.CurrentController] = ViewContext.RouteData.GetRequiredString("controller").ToLower(); 
} 

ответ

0

Я получаю ошибки Имя 'AppConstants' не существует в текущем контексте

Без сниппета вы цитируете, действительно начинается с

@using MyProject.Constants 

вы частичный вид?

Это необходимо во всех представлениях, которые ссылаются на имена в этом пространстве имен и для любых других пространств имен, которые вам нужны. Если вам нужно пространство имен, значительная часть ваших просмотров рассматривает возможность добавления его в список глобальных пространств имен в файле web.config в папке «Представления».

+0

Нет частичного представления не начинается с '@using MyProject.Constants', нужно ли его включать? – adam78

+0

Есть ли способ включить эти константы, не указывая @using в каждом отдельном частичном представлении? Я хочу определить один раз только в _layout.cshtml. – adam78

+0

@ozzii Вы можете определить глобальные значения в 'web.config' в папке views. (Вы увидите 'System.Web.Mvc', и по умолчанию добавлено несколько других пространств имен.) – Richard