asp.net-mvc-3 – ASP.Net MVC 3 – 编辑器模板的客户端不显眼验
我是ASP.Net MVC 3的新手,面对一些问题,同时尝试为我创建的用于以自定义方式显示日期的编辑器模板实现客户端不显眼的验证.
UI 我已经提出了一个EditorTemplate,用于显示三个部分的日期 @model DateTime? <table class="datetime"> <tr> <td>@Html.TextBox("Day",(Model.HasValue ? Model.Value.ToString("dd") : string.Empty)) </td> <td class="separator">/</td> <td>@Html.TextBox("Month",(Model.HasValue ? Model.Value.ToString("MM") : string.Empty))</td> <td class="separator">/</td> <td>@Html.TextBox("Year",(Model.HasValue ? Model.Value.ToString("yyyy") : string.Empty))</td> </tr> <tr> <td class="label">dd</td> <td/> <td class="label">mm</td> <td/> <td class="label">yyyy</td> </tr> </table> 模型 在此结构中,我必须将出生日期字段绑定到此属性,该字段是我的模型的子对象中的属性 MyModel --> MySubModel --> DateOfBirth public class MySubModel { ... [DataType(DataType.Date)] [Display(Name = "Date of birth")] [DateTimeClientValidation()] public DateTime DateofBirth { get; set; } ... } 客户端验证 我已经提出了一个自定义验证属性,它实现了IClientValidatable public class DateTimeClientValidationAttribute : ValidationAttribute,IClientValidatable { ... public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata,ControllerContext context) { List<ModelClientValidationRule> clientRules = new List<ModelClientValidationRule>(); //Combined date should be valid ModelClientValidationRule validDateRule = new ModelClientValidationRule { ErrorMessage = "Please enter a valid date.",ValidationType = "validdate" }; validDateRule.ValidationParameters.Add("dayelement",metadata.PropertyName + ".Day"); validDateRule.ValidationParameters.Add("monthelement",metadata.PropertyName + ".Month"); validDateRule.ValidationParameters.Add("yearelement",metadata.PropertyName + ".Year"); clientRules.Add(validDateRule); return clientRules; } ... } 我正在尝试发出Day,Month&的元素名称.这里的年份文本框是客户端验证元素,因此我将在稍后编写客户端jquery验证方法和适配器,这将使用这些元素并在客户端进行验证. 视图 现在,要使用此编辑器模板,我将查看以下行 @model MyModel ... <tr> <td class="editor-label"> @Html.LabelFor(m => m.MySubModel.DateofBirth) </td> <td class="editor-field"> @Html.EditorFor(m => m.MySubModel.DateofBirth) @Html.ValidationMessageFor(m => m.MySubModel.DateofBirth) </td> </tr> ... 在视图中添加了所有相关的jquery验证文件作为引用 问题 >虽然我已经实现了IClientValidatable,但这并没有在html中散发出不显眼的javascript验证属性. 感谢您耐心地阅读所有这些以及答案 解决方法
经过一番努力,我让控制工作,如果它对那里的任何人都有帮助,那就投入使用.
第一点是将控件定义为 @model DateTime? <table class="datetime"> <tr> <td>@Html.TextBox("",(Model.HasValue ? Model.Value.ToString("dd") : string.Empty)) </td> <td class="separator">/</td> <td>@Html.TextBox("",(Model.HasValue ? Model.Value.ToString("MM") : string.Empty))</td> <td class="separator">/</td> <td>@Html.TextBox("",(Model.HasValue ? Model.Value.ToString("yyyy") : string.Empty))</td> </tr> <tr> <td class="label">dd</td> <td/> <td class="label">mm</td> <td/> <td class="label">yyyy</td> </tr> </table> 确保您将空字符串作为名称提供给所有三个文本框,这会强制MVC框架为客户端中的所有三个文本框生成与Model DateofBirth相对应的相同名称.此外,将为列表中的第一个文本框生成不显眼的javascript验证参数,因为它是具有模型名称的编辑控件的第一个出现. 在客户端,任何这些文本框上的任何事件都会触发所有相关的验证事件,因为所有这三个文本框都具有相同的名称. 除了必需的常规验证之外,….我们必须编写一个自定义客户端验证例程,它将组合所有这三个值并检查组合值是否构成有效日期.这可以在Jeff给出的answer中实现. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |