Самый простой способ, который я нашел, - это использовать @helper, объявленный в App_Code, который принимает делегатов в качестве аргументов:
@helper Example(Func<int, HelperResult> fn1, Func<int, HelperResult> fn2) {
<div>@fn1(100)</div>
<div>@fn2(200)</div>
}
, а затем создает представление с вспомогательными функциями:
@helper Custom1(int x) { <span class="small">@x</span> }
@helper Custom2(int x) { <span class="big">@x</span> }
и затем вызовите общий помощник следующим образом:
@Example(Custom1, Custom2)
, и, если требуется, общий помощник может реализовать поведение по умолчанию, если делегат имеет значение null
, это намного сложнее, чем простая реализация производногопросмотр с несколькими переопределенными виртуальными помощниками - но, по крайней мере, он работает, строго типизирован и не использует динамический