Включить / отключить проверку на стороне сервера MVC динамически
У меня есть форма MVC смножественный отправить кнопки - 'Сохранить черновик ' а также 'Публиковать', Цель состоит в том, чтобы пропустить проверку как на стороне клиента (javascript / unobructive), так и на стороне сервера, когда 'Сохранить черновик ' нажата кнопка и форма отправлена. Но мне нужно запустить обе проверки, еслиПубликовать' кнопка нажата.
Мои исследования привели меня к нескольким решениям.
Клиентская сторона - путем написания плагина jquery
(function ($) {
$.fn.turnOffValidation = function (form) {
var settings = form.validate().settings;
for (var ruleIndex in settings.rules) {
delete settings.rules[ruleIndex];
}
};
})(jQuery);
и вызывая его как
$('#btnSaveDraft').click(function () {
$(this).turnOffValidation(jQuery('#myForm'));
});
Сторона сервера - Но для серверной стороны единственное решение, которое я смог найти, это удалить ошибки из ModelState. Я сделал это в атрибуте действия, чтобы его можно было многократно использовать и было легко использовать.
[AttributeUsage(AttributeTargets.All)]
public class IgnoreValidationAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var modelState = filterContext.Controller.ViewData.ModelState;
//modelState.Clear();
foreach (var modelValue in modelState.Values)
{
modelValue.Errors.Clear();
}
}
}
Но это не полностью служит моей цели. Зачем нам запускать проверку и устранять ошибки, если мы можем предотвратить это? Это возможно?
Существуют ли способы предотвратить проверку сервера в первую очередь вместо устранения ошибок, возникших в результате проверки?