我的模型中有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
生成,所以我可以为时间字段提供我自己的客户端验证方法?
答案 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验证我有类似的问题,我想改变客户端验证的行为。请参阅链接
这里的想法是您手动将诸如“data-val-required”和“data-val”之类的属性添加到输入字段,然后为其添加验证消息。
希望它能以某种方式帮助你。
修改强>
试试这个
从模型
中删除必填字段attrpublic 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