Эквивалент предварительной обработки для представлений в RAZOR/MVC 3

Я ищу эквивалент

#if DEBUG
   //view elements to show just for debug builds
#if

для просмотра в MVC3/Razor. Какой идиоматический метод для реализации этого типа установки?

4 ответа

Решение

Это слишком грязно, ИМО. Представления должны быть тупыми и ориентированы на рендеринг HTML, а не на принятие решений на основе сборки.

Установите свойства в вашей модели представления, если отладка настроена, и отобразите их в представлении.

Если свойства нулевые (например, не отладочные), ничто не будет обработано.

Вы можете использовать HttpContext.Current.IsDebuggingEnabled, он проверяет значение отладки в файле web.config.

Например:

@if(HttpContext.Current.IsDebuggingEnabled) {
    //view elements to show just for debug builds
}

Другой вариант - использовать написать свое собственное расширение HttpHelper.

public static class HtmlHelperExtensions
{
    public static bool IsDebug(this HtmlHelper helper)
    {
        #if DEBUG
          return true;
        #else
          return false;
        #endif
    } 
}

Тогда в вашем коде Razor вы можете использовать его как:

@if (Html.IsDebug())
{ 
    //view elements to show just for debug builds
}

Директивы препроцессора (#if) — это языковая функция C#, которую можно ввести с помощью блока кода бритвы (@{}), а затем используйте явный переход с разделителями (<text></text>) или явный переход строки (@:), чтобы условно добавить html следующим образом:

      @{

#if DEBUG
{
    @:<div>Debug Mode</div>
}
#else
{
    <text>
        <div>
            Release Mode
        </div>
    </text>
}
#endif

}

См. также : Директивы препроцессора в Razor.

Не думайте, что вы можете сделать это в Razor, поскольку он не компилируется так же, как код C#.

Поэтому я бы сказал, что лучший способ сделать это - сделать это в вашем контроллере и добавить его к значению в вашей модели.

Изменить: вот еще немного информации. Человек здесь предлагает метод расширения, который загружает соответствующий код, независимо от того, находится он в отладке или нет: представление asp.mvc вводит #IF DEBUG в конфигурации выпуска, так как вы не сказали нам, что хотели бы сделать, я не могу дать вам любые "кодовые" ответы.

Другие вопросы по тегам