Там нет @ Html.Button! - PullRequest
       44

Там нет @ Html.Button!

76 голосов
/ 10 мая 2011

это странно. Я вижу ссылки на @ Html.Button (), но когда я набираю, что Intellisense не находит такого помощника ... есть выпадающий список, скрытый, редакторы и так далее, но нет кнопки!

что с этим?

Ответы [ 5 ]

66 голосов
/ 11 мая 2011
public static class HtmlButtonExtension 
{

  public static MvcHtmlString Button(this HtmlHelper helper, 
                                     string innerHtml, 
                                     object htmlAttributes) 
  { 
    return Button(helper, innerHtml,
                  HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)
    ); 
  }

  public static MvcHtmlString Button(this HtmlHelper helper, 
                                     string innerHtml,
                                     IDictionary<string, object> htmlAttributes)
  {
      var builder = new TagBuilder("button");
      builder.InnerHtml = innerHtml;
      builder.MergeAttributes(htmlAttributes);
      return MvcHtmlString.Create(builder.ToString());
  }
}
8 голосов
/ 11 мая 2011

На момент предварительного просмотра mvc 3 (не mvc3) нет помощника по кнопкам

в прошлом было упомянуто несколько таких примеров, например: http://blog.wekeroad.com/blog/aspnet-mvc-preview-using-the-mvc-ui-helpers/ однако прокрутка собственного тривиальна - у меня естьОснова для этого где-то здесь, я должен буду выкопать это, но по существу просто создайте новый Html.ButtonFor и скопируйте исходный код из Html.LabelFor и измените вывод, чтобы создать тег input type = "button".

7 голосов
/ 03 апреля 2014

Чтобы расширить принятый ответ , чтобы можно было привязать кнопку отправки к свойству модели, но иметь другой текст:

@Html.ButtonFor(m => m.Action, Model.LabelForCurrentAction(), new { @class = "btn btn-primary btn-large", type = "submit" })

Использование следующего слегка измененного Button вспомогательного класса :

/// <summary>
/// Via /6501467/tam-net-html-button
/// </summary>
public static class HtmlButtonExtension
{

    public static MvcHtmlString Button(this HtmlHelper helper, object innerHtml, object htmlAttributes)
    {
        return helper.Button(innerHtml, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
    }

    public static MvcHtmlString Button(this HtmlHelper helper, object innerHtml, IDictionary<string, object> htmlAttributes)
    {
        var builder = new TagBuilder("button") { InnerHtml = innerHtml.ToString() };
        builder.MergeAttributes(htmlAttributes);
        return MvcHtmlString.Create(builder.ToString());
    }

    public static MvcHtmlString ButtonFor<TModel, TField>(this HtmlHelper<TModel> html,
                                                        Expression<Func<TModel, TField>> property,
                                                        object innerHtml,
                                                        object htmlAttributes)
    {
        // lazily based on TextAreaFor

        var attrs = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);

        var name = ExpressionHelper.GetExpressionText(property);
        var metadata = ModelMetadata.FromLambdaExpression(property, html.ViewData);

        string fullName = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name);

        ModelState modelState;
        if (html.ViewData.ModelState.TryGetValue(fullName, out modelState) && modelState.Errors.Count > 0)
        {
            if( !attrs.ContainsKey("class") ) attrs["class"] = string.Empty;
            attrs["class"] += " " + HtmlHelper.ValidationInputCssClassName;
            attrs["class"] = attrs["class"].ToString().Trim();
        }
        var validation = html.GetUnobtrusiveValidationAttributes(name, metadata);
        if(null != validation) foreach(var v in validation) attrs.Add(v.Key, v.Value);

        string value;
        if (modelState != null && modelState.Value != null)
        {
            value = modelState.Value.AttemptedValue;
        }
        else if (metadata.Model != null)
        {
            value = metadata.Model.ToString();
        }
        else
        {
            value = String.Empty;
        }

        attrs["name"] = name;
        attrs["Value"] = value;
        return html.Button(innerHtml, attrs);
    }
}
5 голосов
/ 10 октября 2014

MVC5, Bootstrap ver 3.2.0

@Html.ActionLink
(
    linkText: " Remove", 
    actionName: "Index", 
    routeValues: null, // or to pass some value -> routeValues: new { id = 1 },
    htmlAttributes: new { @class = "btn btn-success btn-sm glyphicon glyphicon-remove" }
)

Это создаст ссылку, похожую на кнопку.

1 голос
/ 10 мая 2011

Razor не имеет HTML-помощника "Button".Скорее всего, вы найдете ссылки на специально созданное вспомогательное расширение HTML.

См. Здесь: http://www.asp.net/mvc/tutorials/creating-custom-html-helpers-cs

...