воскресенье, 21 августа 2011 г.

Razor Extensions

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

В данном примере я расширил строковые и булевские переменные весьма простыми, но чрезвычайно полезными и короткими в употреблении, условиями:

public static class RazorExtensions
{   
       public static HelperResult IfHasValue(this string str
                                             Func<object, HelperResult> template)
       {
             return new HelperResult(writer =>
                                     {
                                        if (!string.IsNullOrWhiteSpace(str))
                                                template(str).WriteTo(writer);
                                     });
       }

       public static HelperResult IfTrue(this bool @bool
                                         Func<object, HelperResult> template)
       {
              return new HelperResult(writer =>
                                      {
                                         if (@bool)
                                                template(true).WriteTo(writer);
                                      });
       }
}

Примеры использования:

<a @Model.Boolean.IfTrue(@class="cur"href="@Url.Url()">Сслыка</a>

@Model.String.IfHasValue(@<p><big>@itembig>p>)

Стало ли лучше? )
Источники (раз, два)