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中实现. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 学习LINQ的资源?
- 从ASP.NET应用程序直接将文件上传到Amazon S3
- asp.net – MvcHtmlString.ToHtmlString()不编码HTML?
- asp.net – 网站在解决方案构建后需要很长时间才能启动
- asp.net-mvc – ASP.NET MVC ActionLink外部区域
- asp.net-mvc – 使用Ninject重构依赖注入的ASP.NET MVC代码
- 在ASP.NET中的Response.Redirect中传递cookie
- asp.net – WebAPI在控制器上找不到任何操作
- asp.net – 如何添加jQuery UI按钮图标到输入按钮?
- .net – TransactionScope:它变得更好了吗?
- asp.net-mvc – Asp.Net MVC Ajax.BeginForm没有
- asp.net – 本地化mvc中的默认模型验证2
- asp.net-mvc – Asp.Net核心MVC6如何最初在Ident
- 在ASP.NET C#中调用Web服务时,Session为null
- 如何在ASP.NET MVC应用程序中本地化Controller名
- asp.net-mvc – 使用ASP.Net MVC中的模型绑定器更
- asp.net – 为什么%=%在一种情况下工作,但在另
- asp.net – 请求标头的大小太长
- 如何从asp.net中的客户端网络摄像头捕获图像
- asp.net-core – .NET Core的静态代码分析工具
