asp.net-mvc – 可以浏览DataAnnotations的自定义Html帮助器
发布时间:2021-01-11 21:31:13 所属栏目: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 WebAPI与Ajax进行跨域数据交互时Cookies数据的传递
- asp.net – 使用JavaScript重新排列的ListBox元素导致回发时
- asp.net-mvc – 存储库与DAL中的服务模式:EF和Dapper
- 在HiddenField asp.net中存储一个字符串数组
- asp.net-mvc – ASP.NET MVC中的替代用户管理
- asp.net-mvc – 如何继承ASP.NET MVC控制器并仅更改视图?
- 有没有办法加快asp.net中的编辑 – 编译 – 调试周期?
- asp.net-mvc – 为什么我在带有godaddy服务器的MVC3应用程序
- [asp.net mvc 奇淫巧技] 02 - 巧用Razor引擎在Action内生成
- asp.net-mvc – Asp .Net Core – 无法安装Microsoft.AspNe
推荐文章
站长推荐
- asp.net-mvc – 为什么在ASP.NET MVC中使用lambd
- ASP.NET AJAX与ASP.NET MVC中的jQuery
- ASP.Net Web应用程序安全性不适用于IIS 7?
- asp.net-mvc – SelectListItem中的Selected属性
- 在IIS / ASP.Net中的.NET 1.1应用程序中创建.NET
- asp.net – 如何使用javascript生成假回发?
- asp.net – 当我试图强制401时,自定义授权过滤器
- ASP.NET 清除模式窗口数据缓存的操作方式
- asp.net – IE8 Win7 Facebook Connect问题
- asp.net-mvc – 从MVC版本1迁移后,ASP.NET MVC 2
热点阅读
