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 阅读(1346) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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语句:使用策略模式优化代码结构