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   leonworld2011  阅读(1346)  评论(0编辑  收藏  举报

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示