it-swarm.com.de

Es gibt kein @ Html.Button!

das ist komisch Ich sehe Referenzen für @ Html.Button (), aber wenn ich eingebe, dass Intellisense keinen solchen Helfer findet ... gibt es eine Dropdown-Liste, versteckte Editoren und so weiter, aber keine Schaltfläche!

was ist damit?

78
ekkis
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());
  }
}
67
jessegavin

Ab MVC Preview 3 gibt es keinen Button Helper (nicht MVC3)

es wurde in der Vergangenheit zum Beispiel ein Haufen erwähnt: http://blog.wekeroad.com/blog/aspnet-mvc-preview-using-the-mvc-ui-helpers/ jedoch rollt Ihr eigenes ist trivial - ich habe irgendwo in der Nähe eine Basis dafür. Ich muss sie ausgraben, aber im Wesentlichen nur einen neuen Html.ButtonFor erstellen und den Quellcode aus Html.LabelFor kopieren und die Ausgabe ändern, um einen Eingabetyp zu erstellen = " button "tag.

8

Um das akzeptierte Antwort zu erweitern, können Sie eine Senden-Schaltfläche an eine Modelleigenschaft binden, aber einen anderen Text haben:

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

Mit dem folgenden leicht modifizierte Button -Hilfeklasse :

/// <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);
    }
}
7
drzaus

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

Dadurch wird ein Link erstellt, der wie eine Schaltfläche aussieht.

6
Piotr Knut

Razor scheint keinen "Button" HTML-Helfer zu haben. Sie finden wahrscheinlich Verweise auf eine benutzerdefinierte HTML-Hilfserweiterung.

Siehe hier: http://www.asp.net/mvc/tutorials/creating-custom-html-helpers-cs

1
Ben Finkel