20

我的模型中有一个DateTime属性,但我只对时间部分感兴趣:

public class MyModel
{
    [Required, DataType.Time]
    public DateTime Time
}

在我看来,我这样输出它:

@Html.EditorFor(model => model.Time)

这用于在 MVC 3 中生成以下 html:

<input class="text-box single-line" data-val="true" 
    data-val-required="The Time field is required." 
    id="Time" name="Time" type="time" value="" />

现在我正在尝试使用 MVC 4,这是生成的 html:

<input class="text-box single-line" data-val="true" 
    data-val-date="The field Time must be a date." 
    data-val-required="The Time field is required." 
    id="Time" name="Time" type="time" value="" />

添加了一个额外的属性data-val-date,这会导致客户端验证错误,因为时间(例如“10:30”)未格式化为日期。

我想这是 MVC 4 中的一个错误(我报告了它)?但是在解决之前,有没有办法阻止这个属性的生成呢?或者更好的是,有没有办法让它作为data-val-time替代生成,所以我可以为时间字段提供我自己的客户端验证方法?

4

5 回答 5

4

不理想,但可以胜任;在您的主模板中使用 JavaScript 来删除验证:

$(document).ready(function(){
    $("input[data-val-date]").removeAttr("data-val-date");
});
于 2011-12-05T13:55:10.813 回答
3

使用[DataType("Time")]而不是[DataType(DataType.DateTime)]. 这将使 MVC 不会将您的变量视为DateTime,然后它不会生成data-val-date属性。

本质上[DataType("Time")]使您的变量成为自定义类型。但是,您不能为自定义类型使用任何其他字符串名称。MVC 尝试检测自定义类型的底层类型。只有当您将自定义类型命名为Time时,它才会放弃检测。

于 2013-02-23T23:18:13.960 回答
2

我可以说更好的选择是编写自己的客户端验证函数。否则你可以做一些欺骗,我不会说这是正确的方法,但它可以解决你的问题。关于 MVC 验证,我有类似的问题,我想更改客户端验证的行为。请看链接

Asp.net MVC3 验证

这里的想法是您手动将“data-val-required”和“data-val”等属性添加到输入字段,然后为其添加验证消息。

希望它以某种方式帮助你。

编辑:

尝试这个

从模型中删除必填字段 attr

public class MyModel
{    
    public DateTime Time
}

然后将属性添加到您的控件,如下所示

    @Html.TextBoxFor(model => model.Time, new Dictionary<string, object> { { "data-val-required", "required" }, { "data-val", "true" }})
    @Html.ValidationMessage("Time", "The Time field is required.")
于 2011-11-18T16:07:55.727 回答
1

我尝试将输入字段的值设置为 javascript 日期对象,这反过来又通过了非侵入式验证的验证。

$("#date-input-field").val(new Date(1,0,1970));
$.validator.unobtrusive.parse('#form');
var form = $('#form');
form.validate();

这是通过 jQuery 1.7.2、validation.unobtrusive 和 mvc4 完成的。

希望这可以帮助。

于 2012-04-03T18:47:53.600 回答
1

最好的方法是在HtmlHelper类中设置ClientValidationEnabledUnobtrusiveJavaScriptEnabled为 false 。

HtmlHelper.ClientValidationEnabled = false;
HtmlHelper.UnobtrusiveJavaScriptEnabled = false;
于 2015-05-05T04:03:51.267 回答