使模型INT字段为空可禁用客户端验证

时间:2018-01-10 15:18:07

标签: jquery asp.net-mvc validation

我有一个MVC 6项目,我有一个包含各种数据类型的简单模型(字符串,整数,日期时间等)。

我包含了query-validation和jquery.validation.unobtrisive.js文件。我使用Html.Editorfor和一个Html.Validationmessagefor行为每个字段添加一个输入。当我在我的int字段中添加任何字母字符或添加不正确的日期格式并尝试提交时,我会收到一些很好的,接近​​错误的消息,提醒我这个问题并阻止我提交表单。

但是,如果我在模型中使INT字段可以为空,那么验证就不再发生了。它允许我提交,ModelState.Isvalid变为true,它基本上只丢弃任何无效的数据,对于报告应用程序,可能导致用户获得太多数据(没有意识到他们的过滤器被丢弃)和制作基于他们没有注意到的额外数据的决定不应该在那里。

有没有办法保证这个可以为空的int类型的客户端大小验证完全按照它不可为空的方式发生?这似乎不是可以为空的datetime字段的问题。也许是因为在模型中我可以选择添加数据属性,例如

onSubmit() {
    if (this.form.valid) {

        // Close the dialog.
        this.dialogRef.close(this.areaForCreation);
    };
};

这个数据类型枚举似乎不包含整数通过的值,只包含“datetime,HTML,Email,ImageUrl等”字段。添加如下的注释也无济于事:

[DataType(DataType.DateTime)]
 public Nullable<DateTime> datestart { get; set; }

1 个答案:

答案 0 :(得分:0)

斯蒂芬·穆克的例子帮我弄明白了这个问题。

我使用的是Html.EditorFor而不是Html.TextboxFor。

前者会在我标记/开启时消除无效文本,导致某人不小心在字段中输入信件以使其号码消失,导致人们因为不得不重新打字而生气......或者更糟糕的是,不是意识到它已经消失并提交了一个空白值,因为它们没有引起注意。当我切换到Html.TextBoxFor时,它保留了有效的,解雇了验证错误消息,并阻止表单提交,这正是我想要的。