asp.net-mvc – 集合的验证摘要
编辑:将此问题升级到MVC 2.0
使用asp.net MVC 2.0是否存在创建验证摘要的现有方法,该方法对包含集合的模型有意义?如果没有,我可以创建自己的验证摘要 示例型号: public class GroupDetailsViewModel { public string GroupName { get; set; } public int NumberOfPeople { get; set; } public List<Person> People{ get; set; } } public class Person { [Required(ErrorMessage = "Please enter your Email Address")] [RegularExpression(@"^([a-zA-Z0-9_-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.)|(([a-zA-Z0-9-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$",ErrorMessage = "Please enter a valid Email Address")] public string EmailAddress { get; set; } [Required(ErrorMessage = "Please enter your Phone Number")] public string Phone { get; set; } [Required(ErrorMessage = "Please enter your First Name")] public string FirstName { get; set; } [Required(ErrorMessage = "Please enter your Last Name")] public string LastName { get; set; } } 现有摘要<%= Html.ValidationSummary%>如果没有输入就像这样.
该设计要求插入标题,如下所示:
答案基于Pharcyde的答案. public static MvcHtmlString NestedValidationSummary(this HtmlHelper helper) { if (helper.ViewData.ModelState.IsValid) return MvcHtmlString.Empty; // create datastructure to group error messages under a given key (blank key is for general errors) var errors = new Dictionary<string,List<string>>(); foreach (KeyValuePair<string,ModelState> keyPair in helper.ViewData.ModelState) { foreach (ModelError error in keyPair.Value.Errors) { //determine the 'key' for the group in which this error belongs var key = keyPair.Key.Split(']')[0]; if (key.Contains("People[")) key = "Person " + key.Split('[')[1]; else key = string.Empty; if(!errors.ContainsKey(key)) errors.Add(key,new List<string>()); //now add message using error.ErrorMessage property errors[key].Add(error.ErrorMessage); } } // generate the HTML var ul = new TagBuilder("ul"); foreach (KeyValuePair<string,List<string>> errorPair in errors.OrderBy(p=>p.Key)) { var li = new TagBuilder("li"); if(!string.IsNullOrEmpty(errorPair.Key)) li.InnerHtml += string.Format("<p class="no-bottom-margin"><strong>{0}</strong></p>",errorPair.Key); var innerUl = new TagBuilder("ul"); foreach (var message in errorPair.Value) { var innerLi = new TagBuilder("li"); innerLi.InnerHtml = message; innerUl.InnerHtml += innerLi.ToString(TagRenderMode.Normal); } li.InnerHtml += innerUl.ToString(TagRenderMode.Normal); ul.InnerHtml += li.ToString(TagRenderMode.Normal); } return MvcHtmlString.Create(ul.ToString(TagRenderMode.Normal)); } 解决方法
您将不得不扩展HtmlHelper方法并自行滚动.下面是一些对于您需要一个组的情况很重要的代码:
//HtmlHelper being extended if(helper.ViewData.ModelState.IsValid) { foreach(KeyValuePair<string,ModelState> keyPair in helper.ViewData.ModelState) { //add division for group by here using keyPair.Key property (would be named "Person" in your case). foreach(ModelError error in keyPair.Value.Errors) { //now add message using error.ErrorMessage property } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 如何构建专门的JQuery Timer
- 隐藏ASP.NET菜单项
- asp.net-mvc-2 – ASP MVC2中部分缓存的当前做法是什么?
- ASP.NET:存储应用程序设置的位置?
- asp.net – 带超时异常的reCaptcha验证
- asp.net-core – 如何使用带有IdentityServer4的ASP.Net标识
- ASP.Net vs MVC vs WebAPI和UseTaskFriendlySynchronizatio
- asp.net – 通过javascript从代码后面访问变量
- asp.net – 用于创建事件处理程序存根的Visual Studio键盘快
- asp.net-web-api – 使用WebAPI和RavenDB进行基本会话处理
- asp.net – 按钮单击在更新面板中不起作用
- ASP.NET代码生成器
- asp.net-mvc – 为什么这个MVC路由不起作用?
- asp.net – requestValidationMode 4.5 vs 2.0
- asp.net – MVC3:如何强制Html.TextBoxFor使用模
- 我可以使用MiniProfiler来检测ASP.NET MVC WebAp
- asp.net-mvc – 如何单元测试返回ContentResult的
- ASP.NET持续学习
- asp.net – 如何在Gridview中绑定DropDownList,而
- asp.net – IIS Web Garden中的Singleton对象