asp.net-mvc – 可以浏览DataAnnotations的自定义Html帮助器
发布时间:2021-01-12 03:41:17 所属栏目:asp.Net 来源:互联网
导读:说我有这样的模型 public class User{ [Required] [StringLength(14, ErrorMessage = Can only be 14 characters long)] public string UserName;} 我想创建一个这样的Html帮助器: @Html.ValidatableEditorFor(m = m.U
说我有这样的模型 public class User { [Required] [StringLength(14,ErrorMessage = "Can only be 14 characters long")] public string UserName; } 我想创建一个这样的Html帮助器: @Html.ValidatableEditorFor(m => m.UserName) 所以它会吐出一个正确格式的jQuery Vaidation插件的文本字段,以便能够验证,如下所示: <input type="text" class="required" maxlength="14" /> 从我的研究中,似乎没有办法迭代MetaDataModel中的所有数据注释,以便我可以检查哪一个适用于jQuery验证. 我如何设想它在伪代码中工作? var tag = new TagBuilder("input"); tag.mergeAttribute("type","text"); foreach(var attribute in metadata.attributes) { CheckForValidatableAttribute(attribute,tag); } ... private void CheckForValidatableAttribute(DataAnnotation attribute,TagBuilder tag) { switch(attribute.type) { case Required: tag.addClass("required"); break; case StringLength tag.mergeAttribute("maxlength",attribute.value) break; } } 我该如何去实现这样的帮手?我希望它能够处理数据注释,以便我不必复制验证字面值. 例如,像TextEditorFor这样的当前的Html帮助者将可验证的属性附加到它们的输出字段.它如何做到这一点,以及如何使自己的实现? 干杯 解决方法你可以使用这个简单的条件:if(attribute.Type is ValidationAttribute) { string className = attribute.Type.Name.Replace("Attribute","").ToLower(); } UPDATE 定义一个Html助手: public static MvcHtmlString ValidationEditorFor<TModel,TProperty>(this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel,TProperty>> expression) { .... } 创建这个助手方法: private static string GetPropertyNameFromExpression<TModel,TProperty>(HtmlHelper<TModel> htmlHelper,TProperty>> expression) { MemberExpression memberExpression = expression.Body as MemberExpression; if (memberExpression == null) throw new InvalidOperationException("Not a memberExpression"); if (!(memberExpression.Member is PropertyInfo)) throw new InvalidOperationException("Not a property"); return memberExpression.Member.Name; } 现在在ValidationEditor中使用这个: var propertyName = GetPropertyNameFromExpression(htmlHelper,expression); var propertyType = typeof(TModel).GetProperties().Where(x=>x.Name == propertyName).First().PropertyType; var attributes = propertyType.GetCustomAttributes(true).OfType<ValidationAttribute>(); 现在你可以检查属性….休息很容易. (编辑:哈尔滨站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 是否可以根据用户角色隐藏/显示Kendo网格列?
- 有没有办法将内部控件放在ASP.NET自定义控件中?
- asp.net-mvc – 如何锁定ASP.NET MVC中的路径?
- ASP.NET成员:拒绝用户阻止CSS,页面无法正确呈现?
- asp.net-mvc-4 – 最小和最大字符串长度的单独错误消息 –
- ASP.NET登录页面重定向问题
- asp.net-mvc – ASP.NET MVC3中的随机会话超时
- asp.net-core – 如何在Visual Studio 2015 RC中为ASP.NET
- .net – asp:GridView文本框始终返回空值
- asp.net – 检查.NET中两个双精度相等的问题 – 这个方法有
推荐文章
站长推荐
- asp.net – Orchard CMS是否支持移动呈现?
- asp.net – 我可以重新发布或携带POST数据(如果是
- asp.net-mvc – ASP.Net MVC中的自我AJAX更新部分
- .net – ReportViewer 2010无法评估表达式
- asp.net-web-api – WebApi 2.1 PUT抛出错误415
- 什么是在asp.net中301重定向更推荐的方法?
- asp.net – Orchard CMS Media中的文件大小上传限
- ASP.NET linkbutton两次提高onBeforeUnload事件
- asp.net – 为什么Global.asax事件在我的ASP.NET
- asp.net使用DataTable构造Json字符串的方法
热点阅读