điều này thật kỳ lạ. Tôi thấy các tài liệu tham khảo cho @ Html.Button () nhưng khi tôi nhập Intellisense đó không tìm thấy một trình trợ giúp nào như vậy ... có danh sách thả xuống, ẩn, trình chỉnh sửa, v.v., nhưng không có nút!
có chuyện gì vậy
điều này thật kỳ lạ. Tôi thấy các tài liệu tham khảo cho @ Html.Button () nhưng khi tôi nhập Intellisense đó không tìm thấy một trình trợ giúp nào như vậy ... có danh sách thả xuống, ẩn, trình chỉnh sửa, v.v., nhưng không có nút!
có chuyện gì vậy
Câu trả lời:
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" })
định dạng, thêm lớp này:public static MvcHtmlString Button(this HtmlHelper helper, string text, object htmlAttributes) { return Button(helper, text, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); }
HtmlHelper.AnonymousObjectToHtmlAttributes
trước đây?
Không có trình trợ giúp nút nào kể từ bản xem trước mvc 3 (không phải mvc3)
nó đã được đề cập đến rất nhiều trong quá khứ, ví dụ: http://blog.wekeroad.com/blog/aspnet-mvc-preview-using-the-mvc-ui-helpers/ tuy nhiên việc tự lăn lộn của bạn là chuyện nhỏ - tôi có cơ sở Đối với nó ở đâu đó xung quanh đây, tôi sẽ phải đào nó lên, nhưng về cơ bản chỉ cần tạo một Html.ButtonFor mới và sao chép mã nguồn từ Html.LabelFor và thay đổi đầu ra để tạo thẻ input type = "button".
Để mở rộng câu trả lời được chấp nhận , vì vậy bạn có thể liên kết nút gửi với thuộc tính mô hình nhưng có văn bản khác:
@Html.ButtonFor(m => m.Action, Model.LabelForCurrentAction(), new { @class = "btn btn-primary btn-large", type = "submit" })
Sử dụng lớp trợ giúp được sửa đổi một chútButton
sau :
/// <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 phiên bả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" }
)
Điều này sẽ tạo ra một liên kết trông giống như một nút.
Razor dường như không có trình trợ giúp HTML "Nút". Bạn có thể tìm thấy các tham chiếu đến tiện ích mở rộng trình trợ giúp HTML được tạo tùy chỉnh.
Xem tại đây: http://www.asp.net/mvc/tutorials/creating-custom-html-helpers-cs