There's no @Html.Button !

后端 未结 5 1872
粉色の甜心
粉色の甜心 2020-12-04 14:55

this is weird. I see references out there for @Html.Button() but when I type that Intellisense doesn\'t find such a helper... there\'s dropdownlist, hidden, editors, et cet

相关标签:
5条回答
  • 2020-12-04 15:38
    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());
      }
    }
    
    0 讨论(0)
  • 2020-12-04 15:40

    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" }
    )
    

    This will generate a link that looks like a button.

    0 讨论(0)
  • 2020-12-04 15:43

    There is no button helper as of mvc preview 3 (not mvc3)

    it was mentioned a bunch in the past for example: http://blog.wekeroad.com/blog/aspnet-mvc-preview-using-the-mvc-ui-helpers/ however rolling your own is trivial - I have a basis for it somewhere around here I'll have to dig it up, but essentially just create a new Html.ButtonFor and copy the source code from Html.LabelFor and change the output to create an input type="button" tag.

    0 讨论(0)
  • 2020-12-04 15:46

    Razor does not appear to have a "Button" HTML helper. You're likely finding references to a custom-built HTML helper extension.

    See here: http://www.asp.net/mvc/tutorials/creating-custom-html-helpers-cs

    0 讨论(0)
  • 2020-12-04 15:48

    To expand on the accepted answer, so you can bind a submit button to a model property but have different text:

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

    Using the following slightly modified Button helper class:

    /// <summary>
    /// Via https://stackoverflow.com/questions/5955571/theres-no-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);
        }
    }
    
    0 讨论(0)
提交回复
热议问题