Подтвердить что ты не робот

Как я могу предотвратить создание атрибута проверки?

У меня есть свойство 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 вместо этого, поэтому я могу предоставить свой собственный метод проверки на стороне клиента для полей времени?

4b9b3361

Ответ 1

Не идеально, но он будет выполнять эту работу; используйте JavaScript в своем основном шаблоне, чтобы удалить проверку:

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

Ответ 2

Используйте [DataType ( "Время" )] вместо [DataType (DataType.DateTime)]. Это заставит MVC не обрабатывать вашу переменную как DateTime, а затем не будет генерировать атрибут "data-val-date".

По существу [DataType ( "Время" )] делает вашу переменную нестандартным. Однако вы не можете использовать любое другое имя строки для настраиваемого типа. MVC пытается обнаружить базовый тип для настраиваемого типа. Только когда вы назовете свой собственный тип как "Время" , он откажется от обнаружения.

Ответ 3

Я могу сказать, что лучшим вариантом будет написать собственную функцию проверки на стороне клиента. В противном случае вы можете сделать spoofing, который я не скажу, что это правильный путь, но он может решить вашу проблему. У меня была аналогичная проблема в отношении проверки MVC, где я хотел изменить поведение проверки на стороне клиента. См. Ссылку

Проверка ASP.NET MVC3

Идея здесь заключается в том, что вы вручную добавляете в поле ввода такие атрибуты, как "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.")

Ответ 4

Я попытался установить значение поля ввода как объект даты 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.

Надеюсь, что это поможет.

Ответ 5

Лучший способ - установить ClientValidationEnabled и UnobtrusiveJavaScriptEnabled на false в классе HtmlHelper.

HtmlHelper.ClientValidationEnabled = false;
HtmlHelper.UnobtrusiveJavaScriptEnabled = false;