zoukankan      html  css  js  c++  java
  • 引导HTML助手

    介绍 Twitter上的那些家伙用他们的Bootstrap框架为全世界的开发者做了一件好事。这对于我们这些在UI设计方面技能有限的程序员来说特别有用。通过Bootstrap Helpers项目,我使。net开发人员的工作变得更加容易。 更新(2018.05.19) 这个项目已经被我的。net Core的Extenso项目中的ExtensoUI包所取代。它没有所有相同的助手,但大多数重要的助手都在那里(手风琴,标签,面板,模态和一些更小的东西)。更重要的是,我使它可扩展,这样您就可以为Bootstrap 4、Foundation 5或6、jQueryUI等添加自己的提供者。我已经创建了一个矛头包剑道以及我将可能在未来改进这。享受吧! 更新(2013.05.10) 注意,引导帮助程序现在可以作为Nuget包使用!链接如下:https://www.nuget.org/packages/VortexSoft.Bootstrap[title="New Window">^]。另外,这个项目现在托管在GitHub上,因为现在大多数人似乎都在用GitHub来做开源项目。我希望这将有助于贡献者。下面是它的链接:https://github.com/gordon-matt/BootstrapHelpers[title="New Window">^] 使用 下面是一些使用Razor语法的最有用的HTML帮助程序示例。 模态对话框 隐藏,复制Code

    <a class="btn" data-toggle="modal" href="#myModal" >Normal Modal</a>
    
    @using (var modal = Html.Bootstrap().Begin(new Modal(new { id = "myModal" })))
    {
        using (var header = modal.BeginHeader())
        {
            <button type="button" class="close" 
                data-dismiss="modal"</button>
            <h3>Modal header</h3>
        }
        using (var body = modal.BeginBody())
        {
            <p>One fine body…</p>
        }
        using (var footer = modal.BeginFooter())
        {
            @Html.Bootstrap().Button("Close", BootstrapNamedColor.Default, 
                  null, new { data_dismiss = "modal" })
            @Html.Bootstrap().Button("Save Changes", BootstrapNamedColor.Primary, null)
        }
    }

    选项卡 隐藏,复制Code

    @using (var tabs = Html.Bootstrap().Begin(new Tabs()))
    {
        tabs.Tab("Tab One", "tab1");
        tabs.Tab("Tab Two", "tab2");
        tabs.Tab("Tab Three", "tab3");
    
        using (tabs.BeginPanel())
        {
            <p>This is tabs panel 1 content</p>
        }
        using (tabs.BeginPanel())
        {
            <p>This is tabs panel 2 content</p>
        }
        using (tabs.BeginPanel())
        {
            <p>This is tabs panel 3 content</p>
        }
    }

    您还可以将选项卡放在左边或右边。下面是一个例子: 隐藏,复制Code

    @using (var tabs = Html.Bootstrap().Begin(new Tabs(TabPosition.Left)))
    {
    //etc
    }

    手风琴/崩溃 隐藏,复制Code

    @using (var accordion = Html.Bootstrap().Begin(new Accordion("accordion1")))
    {
        using (var panel = accordion.BeginPanel("Panel 1", "panel1"))
        {
            <p>This is accordion panel 1 content</p>
        }
        using (var panel = accordion.BeginPanel("Panel 2", "panel2"))
        {
            <p>This is accordion panel 2 content</p>
        }
    }

    旋转木马 隐藏,复制Code

    @using (var carousel = Html.Bootstrap().Begin(new Carousel("carousel1")))
    {
        carousel.Item("~/Images/Red.png", "Red");
    
        using (var item = carousel.ItemWithCaption("~/Images/Green.png", "Green"))
        {
            <h4>This is Green</h4>
            <p>Green is a nice color</p>
        }
    
        carousel.Item("~/Images/Blue.png", "Blue");
    }

    子导航 隐藏,复制Code

    @using (var subNav = Html.Bootstrap().Begin(new SubNavBar()))
    {
        subNav.Item("Modal", "#demoModal");
        subNav.Item("Tabs", "#demoTabs");
        subNav.Item("Accordion", "#demoAccordion");
        subNav.Item("Other", "#demoOther");
        subNav.Item("Toolbar", "#demoToolbar");
        subNav.Item("Thumbnails", "#demoThumbs");
        subNav.Item("Carousel", "#demoCarousel");
        subNav.Item("Code Blocks", "#demoCodeBlocks");
        subNav.Item("Forms", Url.Action("DemoForm", "Home"));
    
        subNav.DropDownItem("DropDown", new List<BootstrapListItem>
        {
            new BootstrapListItem { Text = "Something", Url = "#something" },
            new BootstrapListItem { Text = "Something Else", Url = "#something-else" },
            new BootstrapListItem { Text = "Yet Something More", Url = "#yet-something-more" }
        });
    }

    杂项 您还可以找到许多较小的助手,比如按钮。下面是一个动作按钮的例子: 隐藏,复制Code

    @Html.Bootstrap().ActionButton("Home", BootstrapNamedColor.Primary, 
                 "Index", "Home")

    是怎么做到的 在构建HTML helper时,我认为将它们与其他标准helper区分开总是一种好的做法。所以,与其打电话: 隐藏,复制Code

    Html.BeginBootstrapAccordion()

    或者类似的东西,我们想叫: 隐藏,复制Code

    Html.Bootstrap().Begin(new Accordion())

    这样做的方法是首先创建一个名为Bootstrap的类,只有一个构造函数,其可访问性设置为internal。下面是一个例子: 隐藏,复制Code

    public class Bootstrap<TModel>
    {
        private readonly HtmlHelper<TModel> helper;
    
        internal Bootstrap(HtmlHelper<TModel> helper)
        {
            this.helper = helper;
        }
    //etc

    当然,您还需要传递HtmlHelper的实例,在该类中您将添加所有helper方法。这里有一个简单的例子(重载): 隐藏,收缩,复制Code

    public MvcHtmlString ActionButton
    (string text, BootstrapNamedColor color, string actionName, string controllerName)
    {
        return ActionButton(text, color, actionName, controllerName, null);
    }
    
    public MvcHtmlString ActionButton(string text, BootstrapNamedColor color, 
           string actionName, string controllerName, object routeValues)
    {
        return ActionButton(text, color, actionName, controllerName, routeValues, null);
    }
    
    public MvcHtmlString ActionButton(string text, BootstrapNamedColor color, 
           string actionName, string controllerName, object routeValues, object htmlAttributes)
    {
        var builder = new TagBuilder("a");
        builder.SetInnerText(text);
    
        builder.MergeAttributes(HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
    
        switch (color)
        {
            case BootstrapNamedColor.Important: builder.AddCssClass("btn btn-danger"); break;
            case BootstrapNamedColor.Default: builder.AddCssClass("btn"); break;
            case BootstrapNamedColor.Info: builder.AddCssClass("btn btn-info"); break;
            case BootstrapNamedColor.Inverse: builder.AddCssClass("btn btn-inverse"); break;
            case BootstrapNamedColor.Primary: builder.AddCssClass("btn btn-primary"); break;
            case BootstrapNamedColor.Success: builder.AddCssClass("btn btn-success"); break;
            case BootstrapNamedColor.Warning: builder.AddCssClass("btn btn-warning"); break;
            default: builder.AddCssClass("btn"); break;
        }
    
        var urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
        builder.MergeAttribute("href", urlHelper.Action(actionName, controllerName, routeValues));
    
        return MvcHtmlString.Create(builder.ToString());
    }

    最后,您需要在某个地方创建Bootstrap类的实例。因为它只有一个内部构造函数,你只能实例化它从项目中创建,因为你想要能够使用它从任何其他项目,你所做的是创建一个公共扩展方法在同一个项目,像这样: 隐藏,复制Code

    public static class HtmlHelperExtensions
    {
        public static Bootstrap<TModel> Bootstrap<TModel>(this HtmlHelper<TModel> htmlHelper)
        {
            return new Bootstrap<TModel>(htmlHelper);
        }
    }

    就这么简单,你现在可以把你所有的辅助方法添加到Bootstrap中"我们称它为name space;我找不到更好的词了。现在我这样使用它: 隐藏,复制Code

    @Html.Bootstrap().ActionButton("Home", BootstrapNamedColor.Primary, "Index", "Home")

    太棒了!给我更多!好的,好的,这里开始:检查以下内容: 隐藏,复制Code

    @using (Html.BeginForm()) {
        @Html.AntiForgeryToken()
        @Html.ValidationSummary()
    
        <fieldset>
            <legend>Registration Form</legend>
            <ol>
                <li>
                    @Html.LabelFor(m => m.UserName)
                    @Html.TextBoxFor(m => m.UserName)
                </li>
                <li>
                    @Html.LabelFor(m => m.Password)
                    @Html.PasswordFor(m => m.Password)
                </li>
                <li>
                    @Html.LabelFor(m => m.ConfirmPassword)
                    @Html.PasswordFor(m => m.ConfirmPassword)
                </li>
            </ol>
            <input type="submit" value="Register" />
        </fieldset>
    }

    这里的HTML帮助器是BeginForm(),它有点不同…是的,它允许您在大括号之间添加HTML内容。好了!有没有想过这是怎么做到的?好了,停止想. .让我们创建我们自己的。你基本上需要创建一个类,从IDisposable继承如下: 隐藏,复制Code

    public class AccordionBuilder<TModel>
    {
        protected readonly TextWriter textWriter;
        protected readonly HtmlHelper<TModel> htmlHelper;
    
        internal AccordionBuilder(HtmlHelper<TModel> htmlHelper, Accordion accordion)
        {
    	this.htmlHelper = htmlHelper;
    	this.textWriter = htmlHelper.ViewContext.Writer;
            	this.textWriter.Write(@"<div class=""acccordion"">");
        }
    
        public override void Dispose()
        {
            this.textWriter.Write(@"</div>");
        }
    }

    实际的手风琴代码比上面的代码要复杂一些。我已经简化了上面的内容,以便让您更清楚地了解正在发生的事情。基本上,在构造函数中,我们编写元素的开始(a <在这种情况下或形式在Html.BeginForm())方法中,我们编写结束标记,在Dispose()方法中,我们编写结束标记。由于using语句自动调用了一个IDisposable上的Dispose(),那么这就是我们所需要做的…这里没有什么特别的。 最后一句 这些助手的存在是为了使每个人受益。因此,我希望会有那些愿意贡献的人,并使这些帮助更好地为每个人。享受吧! 确认 我必须给Attila Losonc的jQuery UI helper项目;正是这个很棒的项目激发了我创建Bootstrap helper。 本文转载于:http://www.diyabc.com/frontweb/news15886.html

  • 相关阅读:
    P5107 能量采集
    P4655 [CEOI2017]Building Bridges
    P1129 [ZJOI2007]矩阵游戏
    P5299 [PKUWC2018]Slay the Spire
    P1625求和 giao精大杂烩
    背包
    根号分治
    CF963B
    国王游戏
    P6006 USACO 3SUM G
  • 原文地址:https://www.cnblogs.com/Dincat/p/13490006.html
Copyright © 2011-2022 走看看