Подтвердить что ты не робот

Общая функция MVC Razor работает в нескольких режимах просмотра

У меня есть функции в моем представлении, которые разделяются несколькими страницами:

@functions 
{
    public HtmlString ModeImage(ModeEnum mode) 
    {
        switch(mode)
        {
            case AMode: new HtmlString("<img etc..."); break;
            // more etc...
        }
    }
}

Есть ли способ иметь его в отдельном файле и включать его на каждую страницу без необходимости копировать и вставлять его в каждый. Я знаю, что могу написать файл .cs и получить доступ к нему на странице, но функция действительно касается представления, и я ненавижу перекомпилировать, если эта функция изменяется.

4b9b3361

Ответ 1

Похоже, вы хотите, чтобы методы Razor @helper описывались в сообщении блога ASP.NET MVC3 и синтаксисе @helper в Razor Скоттом Гатри.

Вот обзор... "Синтаксис @helper в Razor позволяет вам легко создавать повторно используемые вспомогательные методы, которые могут инкапсулировать функциональные возможности вывода в шаблонах вашего представления. Они обеспечивают лучшее повторное использование кода и могут также облегчить чтение кода".

Ответ 2

(Здесь более подробная версия существующих ответов.)

Создайте папку с именем App_Code в корневом каталоге проекта MVC, если она еще не существует. Здесь создайте пустой вид бритвы и назовите его как хотите:

MVC project with Razor view called Shared.cshtml inside App_Code folder

При необходимости добавьте методы @helper и/или static:

@helper ShowSomething()
{
    <span>Something</span>
}

@functions
{
    public static int CalculateSomething()
    {
        return 1;
    }
}

Затем используйте их из своих представлений, сначала получив доступ к общему виду по имени:

@Shared.ShowSomething()
@Shared.CalculateSomething()