我正在使用ASP.NET MVC和Bootstrap构建应用程序。在我的应用程序中,我有一个看起来像这样的模型的视图:
public class EntryModel
{
[Required(ErrorMessage="Please enter the name.")]
[Display(Name="Name")]
public string Name { get; set; }
[Required (ErrorMessage="Please enter the description.")]
[Display(Name = "Description")]
public string Description { get; set; }
}
在这个应用程序中,我还定义了一个自定义html助手,如下所示:
public static class MyHelpers
{
public static MvcHtmlString MyTextBox(this HtmlHelper helper)
{
var sb = new StringBuilder();
sb.Append("<div class=\"form-group\">");
sb.Append("<label class=\"control-label\" for=\"[controlId]\">[labelValue]</label>");
sb.Append("<input class=\"form-control\" id=\"[controlId]\" name=\"controlId\" type=\"text\" value=\"[propertyValue]\">");
sb.Append("</div>");
return MvcHtmlString.Create(sb.ToString());
}
}
我在Razor视图中使用了这个帮助器和模型,如下所示:
@model EntryModel
<h2>Hello</h2>
@using (Html.BeginForm("Add", "Entry", new {}, FormMethod.Post, new { role="form" }))
{
@Html.MyTextBox()
}
我正在尝试从模型的属性中生成帮助器中的labelValue
,controlId
和propertyValue
值。例如,我想使用@Html.MyTextBoxFor(m => m.Name)
并让助手生成如下内容:
<div class="form-group">
<label class="control-label" for="Name">Name</label>");
<input class="form-control" id="Name" name="Name" type="text" value="Jon">
</div>
基本上,我不知道如何将我的模型信息输入到我的html助手中。
答案 0 :(得分:1)
使用此示例作为参考:
public static MvcHtmlString AutoSizedTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)
{
var attributes = new Dictionary<string, Object>();
var memberAccessExpression = (MemberExpression)expression.Body;
var stringLengthAttribs = memberAccessExpression.Member.GetCustomAttributes(
typeof(System.ComponentModel.DataAnnotations.StringLengthAttribute), true);
if (stringLengthAttribs.Length > 0)
{
var length = ((StringLengthAttribute)stringLengthAttribs[0]).MaximumLength;
if (length > 0)
{
attributes.Add("size", length);
attributes.Add("maxlength", length);
}
}
return helper.TextBoxFor(expression, attributes);
}
你可以在这样的视图中调用它: @ Html.AutoSizedTextBoxFor(x =&gt; x.Address2)