Бритва HtmlHelpers с подразделами? - PullRequest
1 голос
/ 15 февраля 2012

Есть ли способ создать собственные помощники HTML и поместить их в подразделы? То есть:

@Html.Buttons.Gray
@Html.Buttons.Blue
@Html.Tables.2Columns
@Html.Tables.3Columns

Спасибо.

Ответы [ 3 ]

1 голос
/ 15 февраля 2012

Помощники - это просто методы расширения.Таким образом, вы можете создавать помощники, которые возвращают объект, который позволяет вам связывать вызовы методов, например @Html.Button("Text").Grey().

public ButtonHelper
{
   public string Text {get; set;}
   public MvcHtmlString Grey()
   {
      return MvcHtmlString.Create("<button class='grey'>"+ Text +"</button>");
   }
}

public static class Buttons
{
   public static ButtonHelper Button(this HtmlHelper, string text)
   {
      return new ButtonHelper{Text = text};
   }
}
1 голос
/ 15 февраля 2012

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

public enum ButtonColor
{
    Blue = 0x1B1BE0,
    Gray = 0xBEBECC
};

public static class Extensions
{
    public static MvcHtmlString Button(this HtmlHelper htmlHelper, string Value, ButtonColor buttonColor)
    {
        string renderButton = 
            string.Format(
                @"<input type=""button"" value=""{0}"" style=""background-color: {1}"" />", 
                Value, 
                buttonColor.ToString()
            );

        return MvcHtmlString.Create(renderButton);
    }
}

Вы могли бы сделать то же самое для стола, но это должно дать вам общее представление. Это обычный вспомогательный метод расширения, но в качестве параметра используется enum val, чтобы получить желаемый конечный результат.

0 голосов
/ 01 мая 2013

Если вы хотите избежать использования функции Buttons (), см. http://haacked.com/archive/2011/02/21/changing-base-type-of-a-razor-view.aspx, чтобы узнать, как выполнить нечто подобное, создав собственный HtmlHelper: @MyAppHtml.Buttons.Gray

Вы можете вместо этого переопределить HtmlHelper, если вы строго хотите @Html.Buttons.Gray

...