如何防止生成验证属性
本文关键字:验证 属性 何防止 | 更新日期: 2023-09-27 18:15:01
我在我的模型中有一个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
生成,这样我就可以为时间字段提供我自己的客户端验证方法?
不理想,但它会做的工作;在主模板中使用JavaScript删除验证:
$(document).ready(function(){
$("input[data-val-date]").removeAttr("data-val-date");
});
用[DataType("Time")]
代替[DataType(DataType.DateTime)]
。这将使MVC不将您的变量视为DateTime
,然后它将不会生成data-val-date
属性。
[DataType("Time")]
使变量成为自定义类型。但是,您不能为自定义类型使用任何其他字符串名称。MVC尝试检测自定义类型的底层类型。只有当您将自定义类型命名为Time
时,它才会放弃检测。 我可以说更好的选择是编写自己的客户端验证函数。否则你可以做一些欺骗,我不会说这是正确的方式,但它可以解决你的问题。我在MVC验证方面也有类似的问题,我想改变客户端验证的行为。请参阅链接
Asp.net mvc验证
这里的想法是您手动添加属性,如"data- value -required"answers"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.")
我尝试将输入字段的值设置为javascript日期对象,这反过来又通过了不引人注目的验证的验证。
$("#date-input-field").val(new Date(1,0,1970));
$.validator.unobtrusive.parse('#form');
var form = $('#form');
form.validate();
这是通过jQuery 1.7.2,验证完成的。不引人注目和mvc4.
最好的方法是在HtmlHelper类中将ClientValidationEnabled
和UnobtrusiveJavaScriptEnabled
设置为false。
HtmlHelper.ClientValidationEnabled = false;
HtmlHelper.UnobtrusiveJavaScriptEnabled = false;