Я работаю над проектом с MVC3 и пытаюсь интегрировать qTip2 с проверкой jQuery, чтобы в качестве всплывающих подсказок отображались ошибки. Проблема, с которой я сталкиваюсь, заключается в том, что, по-видимому, вызов errorPlace при проверке формы ничего не делает, думаю, это как-то связано с тем, как MVC обрабатывает это.
По сути, я хочу использовать встроенную валидацию между MVC3 и jQuery (аннотации), но также интегрирован с qTip, чтобы изменить способ отображения сообщения об ошибке.
Я искал все, и лучшее, что я мог найти, это кто-то, предложивший изменить функцию jquery.validate.unobtrusive.js - onError, но я проверил ее и не знал, как ее правильно изменить, плюс предпочел бы решение это не требовало от меня изменения существующих скриптов.
Спасибо за вашу помощь.
Что у меня так далеко:
Моя модель:
public class User
{
[Required]
public string Id { get; set; }
[Required]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
public string FirstName { get; set; }
public string SecondName { get; set; }
public string LastName { get; set; }
}
Мой JavaScript на мой взгляд:
$('#Form').validate({
errorClass: "errormessage",
errorClass: 'error',
validClass: 'valid',
errorPlacement: function (error, element) {
// Set positioning based on the elements position in the form
var elem = $(element),
corners = ['left center', 'right center'],
flipIt = elem.parents('span.right').length > 0;
// Check we have a valid error message
if (true) {
// Apply the tooltip only if it isn't valid
elem.filter(':not(.valid)').qtip({
overwrite: false,
content: error,
position: {
my: corners[flipIt ? 0 : 1],
at: corners[flipIt ? 1 : 0],
viewport: $(window)
},
show: {
event: false,
ready: true
},
hide: false,
style: {
classes: 'ui-tooltip-red' // Make it red... the classic error colour!
}
})
// If we have a tooltip on this element already, just update its content
.qtip('option', 'content.text', error);
}
// If the error is empty, remove the qTip
else { elem.qtip('destroy'); }
},
success: $.noop // Odd workaround for errorPlacement not firing!
})
$('#Form').submit(function () {
if (!$(this).valid())
return false;
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
beforeSend: function () {
},
success: function (result) {
},
error: function (result) {
}
});
return false;
});