Вот решение, которое я использую.
Во-первых, я отключаю проверку элементов формы моего партиала и никогда не включаю его снова.Я делаю это, определяя селектор класса в опциях валидатора, используя пользовательский скрипт, на который есть ссылка на главной странице.
Затем, нажав кнопку моего родителя, я вызываю validator.element для каждого элемента.Если все они действительны, тогда я выполняю запрос AJAX.
Вызов .element покажет сообщение проверки для поля и вернет логическое значение, указывающее, допустимо ли оно.Вы должны тщательно проверить их, чтобы избежать проблем с коротким замыканием логического оператора, чтобы убедиться, что все сообщения об ошибках отображаются.Я использовал побитовый & для достижения этой цели.
var validator = $("#EmailRecipient_Name").closest("form").validate();
//validator.settings.defaultIgnoreClass is defined in a custom script, and set to ".ignoreValidation"
$("#EmailRecipient_Name").addClass(validator.settings.defaultIgnoreClass);
$("#EmailRecipient_Email").addClass(validator.settings.defaultIgnoreClass);
$("#addNewRecipientLink").click(
function () {
$("#addNewRecipientBox").toggle()
return false;
}
);
$("#addNewRecipient").click(
function(){
var validator = $("#EmailRecipient_Name").closest("form").validate();
if ( validator.element( "#EmailRecipient_Name" ) & validator.element( "#EmailRecipient_Email" ) )
{
$.post(
"@Url.Action( "Create", "EmailRecipient" )",
{
Name: $("#EmailRecipient_Name").val(),
Email : $("#EmailRecipient_Email").val()
},
function( data ){
if ( data.ErrorMessage )
{
alert( data.ErrorMessage );
}
else
{
$("#SelectedEmailRecipients").append("<option value='" + data.EmailRecipientID + "'>" + data.Name + "</option>");
$("#EmailRecipient_Name").val("");
$("#EmailRecipient_Email").val("");
}
}
);
}
return false;
}
);