これは変です。@ Html.Button()の参照がありますが、Intellisenseがそのようなヘルパーを見つけられないと入力すると、ドロップダウンリスト、非表示、エディターなどがありますが、ボタンはありません。
どうしたの?
これは変です。@ Html.Button()の参照がありますが、Intellisenseがそのようなヘルパーを見つけられないと入力すると、ドロップダウンリスト、非表示、エディターなどがありますが、ボタンはありません。
どうしたの?
回答:
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" })
フォーマットを、このクラスを追加しますpublic static MvcHtmlString Button(this HtmlHelper helper, string text, object htmlAttributes) { return Button(helper, text, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); }
HtmlHelper.AnonymousObjectToHtmlAttributes
?
mvcプレビュー3(mvc3ではない)の時点ではボタンヘルパーはありません
たとえば、過去にたくさん言及されていました:http: //blog.wekeroad.com/blog/aspnet-mvc-preview-using-the-mvc-ui-helpers/ ただし、自分でローリングするのは簡単です-私には根拠がありますこのあたりのどこかでそれを掘り下げる必要がありますが、基本的には新しいHtml.ButtonForを作成し、Html.LabelForからソースコードをコピーし、出力を変更して入力type = "button"タグを作成します。
承認された回答を拡張して、送信ボタンをモデルプロパティにバインドできますが、テキストは異なります。
@Html.ButtonFor(m => m.Action, Model.LabelForCurrentAction(), new { @class = "btn btn-primary btn-large", type = "submit" })
次のわずかに変更されたButton
ヘルパークラスを使用します。
/// <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 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" }
)
これにより、ボタンのようなリンクが生成されます。
Razorには「ボタン」HTMLヘルパーがないようです。カスタムビルドのHTMLヘルパー拡張機能への参照を見つける可能性があります。
ここを参照してください:http://www.asp.net/mvc/tutorials/creating-custom-html-helpers-cs