Asp.net mvc4 EditorTemplates
EditorTemplates 对应 @Html.EditorFor
通常 @Html.EditorFor 的用法如下@Html.EditorFor(m => m.UserName) 假如UserName是string的话 那就默认生成一个textbox
对于默认情况下,在model中如果校验失败,则会在textbox会添加 error 的class。而且@Html.ValidationMessageFor(m => m)这样的也是会有默认的式样。
假如不需要默认的式样,那么就要重写EditorTemplates了。
方法是在view/Shared/EditorTemplates/目录下添加对应的cshtml文件,当然ascx也是可以的。
来个例子
如果UserName是string
那么添加的文件就是string.cshtml
@model string @{ ModelState state = ViewData.ModelState[ViewData.ModelMetadata.PropertyName]; if (state != null && state.Errors.Count > 0) { <div class="control-group error"> <label class="control-label" for="@ViewData.ModelMetadata.PropertyName">@ViewData.ModelMetadata.DisplayName</label> <div class="controls"> @Html.PasswordFor(m => m) <span class="help-inline">@Html.ValidationMessageFor(m => m)</span> </div> </div> } else { <div class="control-group"> <label class="control-label" for="@ViewData.ModelMetadata.PropertyName">@ViewData.ModelMetadata.DisplayName</label> <div class="controls"> @Html.PasswordFor(m => m) </div> </div> } }
上面这样的可以解决一些比较简单的类型。
对于Email这类,如果声明是下面这样的
[Required] [Display(Name = "邮箱")] [EmailAddress] public string Email { get; set; }
虽然Email是string 但是如果期望该Email使用string.cshtml的话,那是不行的。具体原因可能要反汇编.net库才知道了。如果有知道的话,也请留言。
有个变通的方法就是使用UIHINT
[Required] [Display(Name = "邮箱")] [EmailAddress] [UIHint("string")] public string Email { get; set; }
声明成这样 就会使用string.cshtml了
posted on 2013-03-20 21:42 leonworld2011 阅读(1354) 评论(0) 收藏 举报
 
                    
                     
                    
                 
                    
                 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号