asp.net-mvc – 可以浏览DataAnnotations的自定义Html帮助器
发布时间:2021-01-12 12:56:34  所属栏目: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 webForm设置允许表单提交Html的方法
 - asp.net-mvc – 是否有一个ASP MVC与JSTL标签等效?
 - asp.net-mvc – 如何与NopCommerce MVC合作
 - asp.net-mvc – 在asp.net mvc 3剃刀中识别html助手的问题
 - asp.net – Javascript日期本地化
 - asp.net – 在Web.config帮助中定义tagPrefixes
 - 数组 – 如何在vbscript中实现具有可变大小的数组
 - asp.net-mvc – ControllerActionInvoker
 - asp.net-mvc – 防止在ASP.NET MVC中缓存属性,每次执行一个
 - asp.net-mvc-3 – 大量使用ViewBag
 
推荐文章
            站长推荐
            - .net – 可以为空的枚举类型的奇怪行为
 - ASP.NET MVC下Ajax.BeginForm方式无刷新提交表单
 - asp.net – LINQ:不支持查询运算符’ElementAtO
 - asp.net-mvc – 如何将html5属性和值导入mvc Hid
 - 选择顶部N值,但跳过M个结果
 - asp.net-mvc – 如何将KendoUI DropDownListFor绑
 - asp.net使用H5新特性实现异步上传的示例
 - 自定义每个用户的会话超时 – ASP.NET
 - asp.net-mvc-2 – ASP.NET MVC2 ModelMetadataPr
 - asp.net-mvc – 使用html.actionlink将模型从视图
 
热点阅读
            