asp.net-mvc-3 – ASP.NET MVC 3 – 验证问题
大家晚上好,我对下拉列表值的验证有疑问.我有一个绑定到名为ReservationData的视图模型类型的视图.
此对象包含List< VehicleData>类型的属性CustomerVehicles. VehicleData有两个int属性VehicleMakeId和VehicleModelId. 在我看来,我试图循环使用CustomerVehicles集合中的项目数量,并使用DropDownListFor显示每个项目的两个下拉列表,车辆制造下拉列表和车辆模型下拉列表. 当我尝试提交并验证时,我没有看到屏幕上显示任何验证错误. 万一你想知道我为每个下拉列表添加了一个ValidationMessageFor.我不确定这是否是我的视图模型的结构及其复杂性以及如何命名控件或如何设置id的问题.任何帮助将不胜感激. 以下是循环集合的代码: @for (var i = 0; i < Model.CustomerVehicles.Count(); i++) { var vehicleNumber = i + 1; <div class="vehicle-selection-wrapper"> <div class="content-container"> <h3> Vehicle @vehicleNumber</h3> <img class="vehicle-image" alt="manufacturer image" src="@Url.Content("~/Content/images/default-vehicle.gif")" /><br /> @Html.LabelFor(m => m.CustomerVehicles[i].VehicleMakeId) @Html.DropDownListFor(m => m.CustomerVehicles[i].VehicleMakeId,new SelectList(Model.VehicleMakes,"Id","Name"),@UIDisplay.Dropdown_DefaultOption,new { @class = "long-field" })<br /> @Html.ValidationMessageFor(m => m.CustomerVehicles[i].VehicleMakeId)<br /> @Html.LabelFor(m => m.CustomerVehicles[i].VehicleModelId) @Html.DropDownListFor(m => m.CustomerVehicles[i].VehicleModelId,new SelectList(new List<CWR.Domain.VehicleModel>(),new { @class = "long-field" }) @Html.ValidationMessageFor(m => m.CustomerVehicles[i].VehicleModelId) </div> </div> } 好的,我还注意到,在生成的HTML中,生成的选项缺少与处理验证的元素相关联的HTML5 data-val属性.这是生成的HTML <select class="long-field" id="CustomerVehicles_0__VehicleMakeId" name="CustomerVehicles[0].VehicleMakeId"><option value="">-- Select --</option> </select><br /> <span class="field-validation-valid" data-valmsg- for="CustomerVehicles[0].VehicleMakeId" data-valmsg-replace="true"></span><br /> <label for="CustomerVehicles_0__VehicleModelId">Model</label> <select class="long-field" id="CustomerVehicles_0__VehicleModelId" name="CustomerVehicles[0].VehicleModelId"><option value="">-- Select --</option> </select> <span class="field-validation-valid" data-valmsg-for="CustomerVehicles[0].VehicleModelId" data-valmsg-replace="true"></span> 此外,在我的VehicleData类中,VehicleMakeId和VehicleModelId属性使用Required属性进行修饰. 更新: 好的,所以我测试并注意到如果我保持我的代码相同,除了我用Html.TextboxFor调用交换Html.DropdownListFor调用,然后验证工作.可能是什么导致了这个?这可能是一个不引人注意的验证的框架错误? 更新:包含修复 所以在ASP.NET Forums上发布同样的问题后,我得到了一个解决方案.在帖子中,您将能够看到不显眼的验证框架中存在错误以及它如何处理下拉列表的验证.用户counsellorben在解释问题方面做得很好,并且解决方案(包括示例代码)将帮助其他人在将来避免此问题,或者至少在Microsoft构建框架修复之前. 谢谢大家的帮助. 解决方法
我也遇到过有关客户端验证的明显大规模监督,使用MVC 3中的下拉列表,我可以提供的最佳解决方案是将缺少的HMTL属性放在自己身上.
在您的视图模型中创建这样的属性. public Dictionary<string,object> CustomerVechicleAttributes { get { Dictionary<string,object> d = new Dictionary<string,object>(); d.Add("data-val","true"); d.Add("data-val-required","Please select a Vechicle."); return d; } } 然后在您的代码中输入 @Html.DropDownListFor(m => m.CustomerVehicles[i].VehicleMakeId,**Model.CustomerVechicleAttributes** }) 只需将Model.CustomerVechicleAttributes作为htmlAttributes添加到您的下拉列表中. 希望这可以帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 实体框架 – EF 7中的db.database.ExecuteSQLCommand等效项
- 如何使ASP.NET ListView水平重复分组项?
- Asp.Net Session相关配置
- asp.net-mvc – 在mvc4中的下拉列表更改事件中提交表单
- asp.net-mvc – 列表中的MVC4绑定下拉列表(bug)
- asp.net-mvc-3 – Razor C# – 设置复选框值
- asp.net-mvc – 使用ASP.NET MVC /实体框架对POCO验证的建议
- asp.net – 如何限制指定文件类型的下载
- asp.net – 存储word文档
- asp.net-mvc – 我为什么要测试我的HTMLHelpers?
- 使用ASP.NET会话状态服务器(而不是InProc)的优点
- asp.net-mvc – 如何将MVC 5 IdentityModels.cs移
- 在ASP.NET 3.5中实现异常处理
- asp.net中的页面卸载事件
- asp.net-mvc – ASP.NET MVC中的Page.EnableSess
- asp.net-mvc – ASP.NET MVC中Rake路由的等价物
- asp.net – 如何在控件中显示十进制值?
- Asp.net 5 MVC 6,添加facebook电子邮件的权限
- asp.net 中用easyui中的treegird的简单使用
- asp.net-mvc – 如何从控制器关闭ASP.NET MVC页面