如何防止生成验证属性?

时间:2011-11-18 13:57:45

标签: c# .net asp.net-mvc jquery-validate asp.net-mvc-4

我的模型中有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中的一个错误(I reported it)?但是在它解决之前,有没有办法阻止生成这个属性?或者甚至更好,有没有办法让它作为data-val-time生成,所以我可以为时间字段提供我自己的客户端验证方法?

5 个答案:

答案 0 :(得分:4)

不理想,但它会完成这项工作;在主模板中使用JavaScript来删除验证:

$(document).ready(function(){
    $("input[data-val-date]").removeAttr("data-val-date");
});

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

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

Asp.net MVC3 validation

这里的想法是您手动将诸如“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.")

答案 3 :(得分: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完成的。

希望这有帮助。

答案 4 :(得分:1)

最好的方法是在HtmlHelper课程中将ZipFile.ExtractToDirectory("destination.zip","destination") ClientValidationEnabled设为false。

UnobtrusiveJavaScriptEnabled