Razor HtmlHelpers的子部分?

时间:2012-02-15 18:20:39

标签: c# asp.net-mvc asp.net-mvc-3 razor html-helper

有没有办法构建自定义Html Helpers并将它们放入子部分?即:

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

感谢。

3 个答案:

答案 0 :(得分:1)

我认为你不能那样做。创建一个枚举,然后使用它来引用颜色,如下所示:

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作为参数来为您提供所需的最终结果。

答案 1 :(得分:1)

助手只是扩展方法。因此,您可以创建返回对象的助手,该对象允许您链接方法调用,例如@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};
   }
}

答案 2 :(得分:0)

如果你想避免将Buttons()作为一个函数,请参阅http://haacked.com/archive/2011/02/21/changing-base-type-of-a-razor-view.aspx,了解如何通过创建自定义HtmlHelper来完成这样的事情:@MyAppHtml.Buttons.Gray

如果您严格要@Html.Buttons.Gray

,则可以改为覆盖HtmlHelper