引导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