esto es raro. Veo referencias para @ Html.Button () pero cuando escribo que Intellisense no encuentra un ayudante ... hay una lista desplegable, oculta, editores, etc., ¡pero no hay botón!
¿Que pasa con eso?
esto es raro. Veo referencias para @ Html.Button () pero cuando escribo que Intellisense no encuentra un ayudante ... hay una lista desplegable, oculta, editores, etc., ¡pero no hay botón!
¿Que pasa con eso?
Respuestas:
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());
}
}
@Html.Button("ButtonText", new {Name = "name", Value = "value" })
formato, agregue esta clase:public static MvcHtmlString Button(this HtmlHelper helper, string text, object htmlAttributes) { return Button(helper, text, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); }
HtmlHelper.AnonymousObjectToHtmlAttributes
antes?
No hay ningún botón auxiliar a partir de la vista previa de mvc 3 (no mvc3)
se mencionó un montón en el pasado, por ejemplo: http://blog.wekeroad.com/blog/aspnet-mvc-preview-using-the-mvc-ui-helpers/ sin embargo, rodar el tuyo es trivial: tengo una base para ello en algún lugar por aquí tendré que desenterrarlo, pero esencialmente solo crear un nuevo Html.ButtonFor y copiar el código fuente de Html.LabelFor y cambiar la salida para crear una etiqueta input type = "button".
Para ampliar la respuesta aceptada , de modo que pueda vincular un botón de envío a una propiedad del modelo pero tener un texto diferente:
@Html.ButtonFor(m => m.Action, Model.LabelForCurrentAction(), new { @class = "btn btn-primary btn-large", type = "submit" })
Usando la siguiente clase auxiliar ligeramente modificadaButton
:
/// <summary>
/// Via /programming/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);
}
}
MVC5, Bootstrap versión 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" }
)
Esto generará un enlace que parece un botón.
Razor no parece tener un ayudante HTML "Botón". Es probable que encuentre referencias a una extensión de ayuda HTML personalizada.
Vea aquí: http://www.asp.net/mvc/tutorials/creating-custom-html-helpers-cs