如何防止生成验证属性?

fre*_*tje 20 .net c# asp.net-mvc jquery-validate asp.net-mvc-4

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

public class MyModel
{
    [Required, DataType.Time]
    public DateTime Time
}
Run Code Online (Sandbox Code Playgroud)

在我看来,我这样输出:

@Html.EditorFor(model => model.Time)
Run Code Online (Sandbox Code Playgroud)

这用于在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="" />
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试使用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="" />
Run Code Online (Sandbox Code Playgroud)

data-val-date添加了额外的属性,导致客户端验证错误,因为时间(例如"10:30")未形成为日期.

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

pra*_*ech 2

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

Asp.net MVC3 验证

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

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

编辑:

尝试这个

从模型中删除所需的字段属性

public class MyModel
{    
    public DateTime Time
}
Run Code Online (Sandbox Code Playgroud)

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

    @Html.TextBoxFor(model => model.Time, new Dictionary<string, object> { { "data-val-required", "required" }, { "data-val", "true" }})
    @Html.ValidationMessage("Time", "The Time field is required.")
Run Code Online (Sandbox Code Playgroud)