Ответ 1
Не идеально, но он будет выполнять эту работу; используйте JavaScript в своем основном шаблоне, чтобы удалить проверку:
$(document).ready(function(){
$("input[data-val-date]").removeAttr("data-val-date");
});
У меня есть свойство DateTime
в моей модели, но меня интересует только часть времени:
public class MyModel
{
[Required, DataType.Time]
public DateTime Time
}
На мой взгляд, я выводим его так:
@Html.EditorFor(model => model.Time)
Это используется для генерации следующего html в MVC 3:
<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 ( "Время" )] вместо [DataType (DataType.DateTime)]. Это заставит MVC не обрабатывать вашу переменную как DateTime, а затем не будет генерировать атрибут "data-val-date".
По существу [DataType ( "Время" )] делает вашу переменную нестандартным. Однако вы не можете использовать любое другое имя строки для настраиваемого типа. MVC пытается обнаружить базовый тип для настраиваемого типа. Только когда вы назовете свой собственный тип как "Время" , он откажется от обнаружения.
Я могу сказать, что лучшим вариантом будет написать собственную функцию проверки на стороне клиента. В противном случае вы можете сделать spoofing, который я не скажу, что это правильный путь, но он может решить вашу проблему. У меня была аналогичная проблема в отношении проверки MVC, где я хотел изменить поведение проверки на стороне клиента. См. Ссылку
Идея здесь заключается в том, что вы вручную добавляете в поле ввода такие атрибуты, как "data-val-required" и "data-val", а затем добавляете к нему сообщение проверки.
Надеюсь, вам это поможет.
Edit:
попробуйте это
Удалить требуемое поле 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, validation.unobtrusive и mvc4.
Надеюсь, что это поможет.
Лучший способ - установить ClientValidationEnabled
и UnobtrusiveJavaScriptEnabled
на false в классе HtmlHelper.
HtmlHelper.ClientValidationEnabled = false;
HtmlHelper.UnobtrusiveJavaScriptEnabled = false;