@ Наследование функций от родительского макета Razor - PullRequest
4 голосов
/ 25 сентября 2011

Можно ли объявить функцию или помощника в представлении макета Razor, и чтобы дочернее представление Razor использовало эту функцию?Моя структура:

_layout.cshtml -> index.cshtml

Где index.cshtml использует _layout.cshtml в качестве макета.Это структура по умолчанию.

Я хочу иметь возможность размещать общие функции / помощники в _layout.cshtml и ссылаться на них в index.cshtml и во всех других представлениях, использующих _layout.cshtml.Это не работает из коробки, если я что-то пропустил.

Я знаю.Я должен использовать скомпилированные AppHelpers или HtmlHelpers для этого, но я могу предвидеть большое удобство в возможности подгонки функций выбора / помощников непосредственно в файле _layout.cshtml.

Спасибо

1 Ответ

7 голосов
/ 25 сентября 2011

Нет, это невозможно. @functions видны только внутри текущего вида.

Вы можете использовать @helper, который можно поместить в папку App_Code и использовать повторно из всех представлений.

Например, вы определяете ~/App_Code/MyHelpers.cshtml:

@helper Foo()
{
    ...
}

и затем в некотором представлении:

@MyHelpers.Foo()

Но я бы порекомендовал скомпилированные помощники. Они удобны для модульных тестов и не зависят от движка, и когда завтра Microsoft представит свой новый движок просмотра Blade, у вас будет 0 работ, чтобы их использовать, тогда как если вы будете кодировать против таких специфических для Razor вещей, как @functions и @helper, то вы придется их портировать. Возможно, вас это не касается, но стоит упомянуть.

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