m4c*_*ine 5 asp.net-mvc jquery jquery-validate data-annotations unobtrusive-validation
我没有使用jquery.ui的datepicker,因为我需要在不同条件下选择整周和多个日期,所以我在EditorTemplate中使用Keith Wood的 datepicker作为我的Date字段:
@model Nullable<DateTime>
@{
string name = ViewData.TemplateInfo.HtmlFieldPrefix;
string id = name.Replace(".", "_");
string dt = Model.HasValue ? String.Format("{0:d}",(string)Model.Value.ToShortDateString()) : string.Empty;
}
@Html.TextBox("", dt, new { @class = "datefield", @type = "date", @id = id })
<script type="text/javascript">
$(document).ready(function () {
$('#@id').datepick({
renderer: $.datepick.themeRollerRenderer,
multiSelect: 999
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
使用文本框并使用日期选择器"弹出"时,验证工作正常; 但我真正想要的是使用内联日期选择器,但我无法在这些条件下进行验证:
@model Nullable<DateTime>
@{
string name = ViewData.TemplateInfo.HtmlFieldPrefix;
string id = name.Replace(".", "_");
string dt = Model.HasValue ? String.Format("{0:d}",(string)Model.Value.ToShortDateString()) : string.Empty;
}
<div class="kwdp">
</div>
@Html.Hidden("", dt, new { @class = "datefield", @id = id })
<script type="text/javascript">
$(document).ready(function () {
$('.kwdp').datepick({
renderer: $.datepick.themeRollerRenderer,
multiSelect: 999
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
这是我的自定义客户端验证的剪辑:
form.validate({
rules:{
StartDate: {
required: true,
dpDate: true
}
},
messages: {
StartDate: 'Please enter a valid date (dd-mm-yyyy)'
}
});
Run Code Online (Sandbox Code Playgroud)
这是我的数据类中DateTime字段的定义:
[Required]
[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MM-yyyy}")]
public Nullable<DateTime> StartDate { get; set; }
Run Code Online (Sandbox Code Playgroud)
我知道我应该为datepicker添加一个onSelect来填充带有日期的隐藏字段,但无论如何,当隐藏字段值为空时我应该收到错误,但是它没有验证.html标记呈现如下:
<input name="StartDate" class="datefield" id="StartDate" type="hidden" data-val-required="The StartDate field is required." data-val="true" data-val-date="The field StartDate must be a date." value=""/>
Run Code Online (Sandbox Code Playgroud)
我使用以下库:
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/datepick/jquery.datepick.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/datepick/jquery.datepick.ext.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/datepick/jquery.datepick.validation.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.ui.datepicker.validation.min.js")" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
我找到了一个类似的未回答的问题,看起来开发人员遇到了同样的问题,但没有发布解决方案.我有什么想法我错了?
杰森是对的.默认情况下,jquery验证会跳过/忽略不可见的输入元素.这适用于input type="hidden"具有/继承display:none;CSS的元素,甚至文本框.有一个名为的设置ignore,其默认值如下所示:
ignore: ':hidden'
Run Code Online (Sandbox Code Playgroud)
您可以使用以下脚本在页面上覆盖此设置:
$.validator.setDefaults({
ignore: ''
});
Run Code Online (Sandbox Code Playgroud)
这告诉jquery验证不要忽略对不可见元素的验证.如果您使用此脚本,则jquery验证应自动进行,不显眼地验证该字段,而无需每次更改datepicker字段值时手动验证.
| 归档时间: |
|
| 查看次数: |
5301 次 |
| 最近记录: |