【问题标题】:Twitter Bootstrap MVC Alternatives [closed]Twitter Bootstrap MVC 替代方案 [关闭]
【发布时间】:2014-02-02 19:18:06
【问题描述】:

在查看https://www.twitterbootstrapmvc.com/ 后,我发现您必须为此付费。

是否有任何免费的替代方案或 tuuriols 可以让您为文本框、复选框、下拉菜单等的引导创建 HTML 助手?

我尝试过创建简单的 HTML 帮助器,但即使我可以覆盖当前的 HTML 帮助器(如 TextBoxFor)但添加类并设置它应该如何呈现这将是有帮助的。

我的第一步示例是在 Views 文件夹中,我创建了一个名为“EditorTemplates”的文件夹

在这个文件夹中,我添加了“string.cshtml”,这被称为 TextBoxFor 之类的东西。

在这里我有:

@{
    var placeholder = string.Empty;
    if (ViewData.ModelMetadata.AdditionalValues.ContainsKey("placeholder"))
    {
        placeholder = ViewData.ModelMetadata.AdditionalValues["placeholder"] as string;
    }
}
<div class="form-group">
    @Html.Label(ViewData.ModelMetadata.PropertyName)
    @Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { placeholder = placeholder, @class = "form-control"})
 </div>

这会创建一个看起来像引导程序的输入项,但不具备所需的灵活性,例如参数。

谢谢

【问题讨论】:

  • 这个问题可能是题外话:Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam.更多关于这个here
  • 既然bootstrap现在真的很流行,我觉得这是个好问题
  • 它只是免费的。您在哪里看到的许可信息?
  • @LmC 我知道这是关闭的,以防您不知道,请查看变色龙表格。 github.com/MRCollective/ChameleonForms

标签: html asp.net-mvc twitter-bootstrap


【解决方案1】:

嗯,最简单的事情就是自己做助手,这真的不难,而且你可以完全控制它们,尤其是你可以重用默认的助手调用,例如对于一个简单的 Boostrap 文本框组,你可以拥有:

public static class BootstrapHtmlHelper
{    
    public static MvcHtmlString TextboxGroupFor<TModel, TProperty>(
        this HtmlHelper<TModel> html, 
        Expression<Func<TModel, TProperty>> expression, 
        string title, 
        string id, 
        string placeholder)
    { 
        StringBuilder sb = new StringBuilder();
        sb.AppendLine("<div class=\"form-group\">");
        sb.AppendLine("<label for=\"{0}\">{1}</label>", id, title);
        sb.AppendLine( htmlHelper.TextBoxFor( expression, new { @class = "form-control", @id = id, @placeholder = placeholder }) );
        sb.AppendLine( htmlHelper.ValidationMessageFor( expression );
        sb.AppendLine("</div>");
        return new MvcHtmlString( sb.ToString() );
    }
}

然后您可以添加任何参数、检查验证、添加帮助框、进行任何类型的格式化等。

然后你可以在你的视图中使用它:

@Html.TextboxGroupFor(x => x.FirstName, "First Name", "first-name-id", "Enter first name...")

更新:

下拉示例,只需重复使用ListBoxFor 并传递IEnumerable&lt;SelectListItem&gt;

public static class BootstrapHtmlHelper
{    
    public static MvcHtmlString DropdownGroupFor<TModel, TProperty>(
        this HtmlHelper<TModel> html, 
        Expression<Func<TModel, TProperty>> expression,
        IEnumerable<SelectListItem> list,
        string selectedValue,
        string title, 
        string id)
    { 
        // Apply selected value to the list
        var selectedList = list.Select(x => x.Value.Equals(selectedValue) ? x.Selected = true : x.Selected = false);

        StringBuilder sb = new StringBuilder();
        sb.AppendLine("<div class=\"form-group\">");
        sb.AppendLine("<label for=\"{0}\">{1}</label>", id, title);
        sb.AppendLine( htmlHelper.ListBoxFor( expression, selectedList, new { @class = "form-control", @id = id }) );
        sb.AppendLine( htmlHelper.ValidationMessageFor( expression );
        sb.AppendLine("</div>");
        return new MvcHtmlString( sb.ToString() );
    }
}

在视图中:

@Html.DropdownGroupFor(
    x => x.Country, 
    Model.Countries.Select(x => new SelectListItem
    { 
        Text = x.Name, 
        Value = x.Id 
    }));

【讨论】:

  • 必须说我喜欢这种方法,你能提供一个选择/下拉的例子吗?因为这是最困难的原因之一?
  • 我在上面为列表框添加了一个示例,但是您对它们有什么特别的困难吗?就像调用 ListBoxFor 而不是 TextBoxFor 一样简单。
  • 你真的成功了!是的,我只是无法让它看起来对我的生活有好处!明天将在实施一个小测试后将其标记为正确。谢谢!
  • 我不记得在我的任何项目中都必须为 BeginForm 这样做,因为表单在 Bootstrap 中非常简单,您只需添加: new { @role = "form" } htmlAttributes 参数,如果您更喜欢这些样式,可能还有 @class="form-horizo​​ntal" 和 @class="form-inline"。
  • 我得到 htmlHelper 在当前上下文中不存在?我从哪里得到这个?不能从类而不是 Razor 调用 TextBoxFor 的许多示例。
【解决方案2】:

您可以为控件创建自己的助手并使用它们。下面是输入按钮自定义助手的示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace CustomHelpers
{
    public static class ButtonHelper
    {
        public static MvcHtmlString Button(this HtmlHelper helper, String       displayText, String elementId, String cssClass, String onClick)
        {
            TagBuilder inputButton = new TagBuilder("input");
            inputButton.AddCssClass(cssClass);
            inputButton.MergeAttribute("value", displayText);
            inputButton.MergeAttribute("id", elementId);
            inputButton.MergeAttribute("type", "button");
            inputButton.MergeAttribute("onclick","" + onClick + "");

            return MvcHtmlString.Create(inputButton.ToString());
        }
    }
}

在您的视图 web.config 文件中的标签下添加命名空间 CustomHelpers,然后您就可以在智能感知中拥有您的助手您只需要重建您的解决方案以使助手在您的视图中可用。

【讨论】:

  • 我也喜欢这个,它是一个很好的例子!但是例如下拉或验证消息呢?
猜你喜欢
  • 1970-01-01
  • 2013-06-11
  • 2012-10-08
  • 2010-10-11
  • 2017-03-23
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 2011-02-14
相关资源
最近更新 更多