我想知道如何通过帮助程序编写HTML Helper(如@Html.TextBoxFor(model => model.signature)
)来生成输入中的data-id
参数。
<input type="text" name="signature" data-id="No Signature" />
注1:dataId
之类的参数由htmlAttributes
起作用,因为它是一个简单的变量。
注2:我知道扩展方法和使用@{var attributes = new Dictionary<string, object>{{ "data-id", "No Signature" }};}
我觉得必须有更好的方法来解决这个问题。任何想法......?
非常感谢。
答案 0 :(得分:4)
您可以通过以下方式添加data-
个属性:
@Html.TextBoxFor(model => model.signature, new { data_id = "No signature" })
您必须使用下划线(_
)而不是短划线(-
)。
提示:您也可以在Model
属性中使用data-
个变量:
new { data_id = Model.Id }
答案 1 :(得分:1)
您可以创建自己的custom helpers,如:
public static class TextBoxExtensions
{
public static string CustomTextBox(this HtmlHelper helper, string name)
{
return String.Format("<input type='text' name={0} data-id='No Signature'></input>", name);
}
}
然后在您的视图中,您可以执行以下操作:
@Html.CustomTextBox("signature");
答案 2 :(得分:-2)
下面的代码将通过扩展TextBoxFor来创建CustomTextBoxFor助手。这使您可以充分利用MVC的验证约定,并打开htmlAttributes参数,以便根据需要添加更多属性。
public static MvcHtmlString CustomTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression, string customData)
{
return htmlHelper.CustomTextBoxFor(expression, customData, (IDictionary<string, object>)null);
}
public static MvcHtmlString CustomTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression, string customData, object htmlAttributes)
{
IDictionary<string, object> attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
attributes.Add("data-custom", customData);
return htmlHelper.TextBoxFor(expression, new { data_custom = "customData" });
}
用法:
@Html.CustomTextBoxFor(model => model.MyProperty, Model.CustomData)
@Html.CustomTextBoxFor(model => model.MyProperty, Model.CustomData, new { @class="pretty"})