无法使用.removeAttr(“data-val-date”)禁用data-val-date;在我的asp.net mvc

时间:2016-05-23 22:27:57

标签: javascript jquery html asp.net-mvc razor

我正在使用asp.net mvc-4 Web应用程序,我正在使用jQuery 1.11.2。我有一个DateTime类型的字段,我在其中定义了一个jQuery日期选择器来填充其值如下: -

@Html.DisplayNameFor(model => model.LiveDate) </span> 
@Html.TextBoxFor(model => model.LiveDate, new { @class = "datepicker", @Value = (Model != null && Model.LiveDate.HasValue) ? Model.LiveDate.Value.ToString("dd/MM/yyyy") : string.Empty })<span class="requiredicon"> *</span> 
@Html.ValidationMessageFor(model => model.LiveDate)



  $(".datepicker").datepicker({
            dateFormat: "dd/mm/yy",
            showOn: "both"

        });

这是日期字段的标记: -

<input Value="24/05/2016" class="datepicker" data-val="true" data-val-date="The field Live Date must be a date." id="LiveDate" name="LiveDate" type="text" value="24/05/2016 00:00:00" /><span class="requiredicon"> 

现在当我尝试从jQuery日期选择器(例如17/05/2016)中选择日期时,我将仅在Safari&amp;上发现以下错误The field Live Date must be a date. Chrome网络浏览器,在IE和Firefox上运行良好。如果我选择01/05/2016之类的日期,它将适用于所有浏览器,,,那么有人可以就此提出建议吗?

现在我读了很多关于这个问题的内容,但找不到任何适用于我的方法。

这里提到的

解决方案1 ​​ linke,是使用以下脚本: -

$(function() {
    $.validator.methods.date = function (value, element) {
        if ($.browser.webkit) {

            //ES - Chrome does not use the locale when new Date objects instantiated:
            var d = new Date();

            return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value)));
        }
        else {

            return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
        }
    };
});

但是当我在我的视图中的脚本部分内添加此脚本时,我注意到非日期字段的客户端验证也已被禁用,这是我不想要的。例如,如果我将所需的int字段留空,页面将在显示验证错误之前重新加载。当我添加上面的脚本时会发生这种情况,所以上面的脚本似乎也会影响非日期字段客户端验证。

解决方案2 。是在我的视图中使用它,删除data-val-date,

$("input[data-val-date]").removeAttr("data-val-date");

现在我在我的视图结尾添加了这个,但它没有禁用我的日期字段的客户端验证。

所以有人可以这样做吗?

1 个答案:

答案 0 :(得分:0)

这对我有用:

$.validator.addMethod('date',
function (value, element) {
    return true; // since MVC4 data-val-date is put on EVERY vm date property. Default implementation does not allow for multiple cultures...
});

将它放在脚本部分。

来自this thread(虽然这不是公认的答案)。