我想创建自己的TextBox Helper来做一件简单的事情:用一些div和标签包装input元素,如下所示:
<div class="col-xs-12">
<label>field name</label>
<div>
<input id='myId' name='MyName' type='text' value='myValue'>
</div>
</div>
在视图中,我想这样称呼它:
@Html.TextBox("Name")
我怎样才能做到这一点?有一种方法可以在我的助手中调用基类吗?
更新:更好的解决方案
在Krishina回答之后,我得到了一个更好的方法,使用这样的代码:
public static MvcHtmlString CliTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string LabelText, object htmlAttributes)
{
var baseFormat = htmlHelper.TextBoxFor(expression, format: null, htmlAttributes: htmlAttributes);
var errors = htmlHelper.ValidationMessageFor(expression, "", new { @class = "text-danger" }).ToString();
if (!string.IsNullOrEmpty(errors))
errors = "<div>" + errors + "</div>";
var wrap = String.Format(
"<div class='col-xs-12'>" +
"<label>{0}</label>" +
"<div>{1}</div>"+
"{2}" +
"</div>", LabelText, baseFormat.ToString(), errors);
return new MvcHtmlString(wrap);
}
通过这种方式,我继续使用TextBoxFor来生成基本输入元素.
最佳答案 您需要为文本框创建自定义Html Helper,如下所示.
namespace MvcApplication.Helpers
{
public static class TextboxExtensions
{
public static HtmlString CustomTextBox(this HtmlHelper helper, string labelName, NameValueCollection parameters)
{
var returnValue = string.Empty;
if (parameters == null || parameters.Count <= 0) return new HtmlString(returnValue);
var attributes = parameters.AllKeys.Aggregate("", (current, key) => current + (key + "=" + "'" + parameters[key] + "' "));
returnValue = String.Format("<div class='col-xs-12'><label>{0}</label>" +
"<div><input " + attributes + "></div></div>", labelName);
return new HtmlString(returnValue);
}
}
}
要使用上述扩展方法,请按照下列步骤操作
在MVC视图中,在顶部编写using语句
@using MvcApplication.Helpers
并且,编写Html帮助程序如下
@ Html.CustomTextBox(“Name”,new NameValueCollection {{“id”,“myId”},{“value”,“myValue”}})
注意:您可以使用json或其他类型而不是NameValueCollection.