我有以下MVC 5 Razor HTML助手:
@Html.TextBoxFor(m => m.ShortName,new { @class = "form-control",@placeholder = "short name"})
我需要这个字段是必需的(即当用户导航而不放置价值旅馆时,有一个红色的轮廓)。在WebForms HTML 5中,我只能说< input type =“text”required />有这个效果。
使用Razor语法完成此功能的正确语法是什么?
解决方法
如果需要,您可以使用所需的html属性:
@Html.TextBoxFor(m => m.ShortName,placeholder = "short name",required="required"})
或者您可以使用.Net中的RequiredAttribute类。使用jQuery,requiredAttribute可以在前端和服务器端进行验证。如果你想去MVC路线,我建议你阅读Data annotations MVC3 Required attribute。
要么
你可以得到真正的进步:
@{ // if you aren't using UnobtrusiveValidation,don't pass anything to this constructor var attributes = new Dictionary<string,object>( Html.GetUnobtrusiveValidationAttributes(ViewData.TemplateInfo.HtmlFieldPrefix)); attributes.Add("class","form-control"); attributes.Add("placeholder","short name"); if (ViewData.ModelMetadata.ContainerType .GetProperty(ViewData.ModelMetadata.PropertyName) .GetCustomAttributes(typeof(requiredAttribute),true) .Select(a => a as requiredAttribute) .Any(a => a != null)) { attributes.Add("required","required"); } @Html.TextBoxFor(m => m.ShortName,attributes) }
或者如果您需要多个编辑器模板:
public static class ViewPageExtensions { public static IDictionary<string,object> GetAttributes(this ViewWebPage instance) { // if you aren't using UnobtrusiveValidation,don't pass anything to this constructor var attributes = new Dictionary<string,object>( instance.Html.GetUnobtrusiveValidationAttributes( instance.ViewData.TemplateInfo.HtmlFieldPrefix)); if (ViewData.ModelMetadata.ContainerType .GetProperty(ViewData.ModelMetadata.PropertyName) .GetCustomAttributes(typeof(requiredAttribute),true) .Select(a => a as requiredAttribute) .Any(a => a != null)) { attributes.Add("required","required"); } } }
那么在你的模板中
@{ // if you aren't using UnobtrusiveValidation,don't pass anything to this constructor var attributes = this.GetAttributes(); attributes.Add("class","form-control"); attributes.Add("placeholder","short name"); @Html.TextBoxFor(m => m.ShortName,attributes) }