asp.net-mvc-3 – DropDownListFor Unobtrusive Validation Requ
This Question是类似的,但接受的答案解决了服务器端,我对客户端解决方案感兴趣.
鉴于此ViewModel public class MyViewModel { public string ID { get; set; } [Required(ErrorMessage = "I DEMAND YOU MAKE A CHOICE!")] [Display(Name = "Some Choice")] public int SomeChoice{ get; set; } [Required(ErrorMessage = "I DEMAND YOU MAKE A CHOICE!")] [Display(Name = "Keyword")] public string Keyword { get; set; } } 和剃刀 <div> @Html.LabelFor(model => model.SomeChoice,new { @class = "label" }) @Html.DropDownListFor(model => model.SomeChoice,(SelectList)ViewBag.SomeChoice,"Select...") @Html.ValidationMessageFor(model => model.SomeChoice) </div> 并假设ViewBag.SomeChoice包含一个选择的选择列表 渲染的html没有得到data-val =“true”data-val-required =“我要求你做出选择!”其中的属性如@ Html.EditorFor(model => model.Keyword)或@ Html.TextBoxFor将呈现. 为什么? 像这样添加一个class =“required” @Html.DropDownListFor(model => model.SomeChoice,"Select...",new { @class = "required" }) 它使用jQuery Validation类语义和块提交但不显示消息.我可以做这种事 @Html.DropDownListFor(model => model.SomeChoice,new Dictionary<string,object> { { "data-val","true" },{ "data-val-required","I DEMAND YOU MAKE A CHOICE!" } }) 哪个会在那里放置正确的属性,并在提交时阻止并显示消息但不利用我在ViewModel上的RequiredAttribute ErrorMessage 那么有没有人写过DropDownListFor,其行为与其他HtmlHelpers在验证方面一样? 编辑 在HomeController.cs中 public class MyViewModel { [Required(ErrorMessage = "I DEMAND YOU MAKE A CHOICE!")] [Display(Name = "Some Choice")] public int? SomeChoice { get; set; } } public ActionResult About() { var items = new[] { new SelectListItem { Text = "A",Value = "1" },new SelectListItem { Text = "B",Value = "2" },new SelectListItem { Text = "C",Value = "3" },}; ViewBag.SomeChoice = new SelectList(items,"Value","Text"); ViewData.Model = new MyViewModel {}; return View(); } About.cshtml @using Arc.Portal.Web.Host.Controllers @model MyViewModel <script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script> @using (Html.BeginForm()) { <div> @Html.LabelFor(model => model.SomeChoice) @Html.DropDownListFor(model => model.SomeChoice,"Select...") @Html.ValidationMessageFor(model => model.SomeChoice) </div> <button type="submit">OK</button> } 这是渲染的代码 <form action="/Home/About" method="post"> <div> <label for="SomeChoice">Some Choice</label> <select id="SomeChoice" name="SomeChoice"><option value="">Select...</option> <option value="1">A</option> <option value="2">B</option> <option value="3">C</option> </select> <span class="field-validation-valid" data-valmsg-for="SomeChoice" data-valmsg-replace="true"> </span> </div> <button type="submit">OK</button> </form> 它回发给我的控制器……这不应该发生 解决方法
只需在要绑定下拉列表的属性上使用可为空的整数,就可以在视图模型上使用:
[Required(ErrorMessage = "I DEMAND YOU MAKE A CHOICE!")] [Display(Name = "Some Choice")] public int? SomeChoice { get; set; } 另外,为了获得适当不引人注目的HTML5 data- *属性,下拉列表必须位于表单内: @model MyViewModel <script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script> @using (Html.BeginForm()) { <div> @Html.LabelFor(model => model.SomeChoice,new { @class = "label" }) @Html.DropDownListFor( model => model.SomeChoice,Model.ListOfChoices,"Select..." ) @Html.ValidationMessageFor(model => model.SomeChoice) </div> <button type="submit">OK</button> } 另外你会注意到我摆脱了ViewBag(我根本无法忍受)并用视图模型上的相应属性替换它,它将包含下拉列表的可能选项. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- CompTIA PK0-003 认证
- asp.net-core – ASP.NET Core WebAPI默认路由不起作用
- asp.net-mvc – 使用GoogleOAuth2AuthenticationOptions时出
- asp.net-mvc – ASP.NET MVC 5 Html.HiddenFor呈现不正确的
- asp.net-mvc-3 – mvc3 OutputCache RemoveOutputCacheItem
- asp.net – 如何在Simile时间轴中重新加载数据
- ASP.NET MVC学习之NuGet在VS中的运用浅谈
- asp.net – 自定义控件变为通用的“UserControl”,而不是其
- asp.net – 如何在文本框的点击事件上附加日历(全局)?
- 【ASP.NET Core】AddMvc和AddMvcCore的区别
- 使用ASP.NET AJAX Control Toolkit设置焦点
- ASP.NET MVC2与实体框架4 – AsEnumerable()或To
- asp.net-mvc – 来自EDMX文件的MVC模型 – 为其添
- 如何在asp.net mvc项目中使用Material-UI
- asp.net – 如何在WCF中使用SOAP :: Lite?
- asp.net – DropDownList的SelectedIndexChanged
- 如何为部署到aws弹性beanstalk的ASP.NET应用程序
- 将ASP.NET MVC 3项目升级到ASP.NET MVC 4
- 使用ASP.net和Access数据库保护SQL Injection的网
- .net – 如何使用Roslyn添加对内存流中编译的类型