Asp.net 当用户使表单无效时,单击“取消”按钮时,如何清除MVC客户端验证错误?
我有一个在主视图中渲染的局部视图。部分视图利用了Asp.net 当用户使表单无效时,单击“取消”按钮时,如何清除MVC客户端验证错误?,asp.net,asp.net-mvc,validation,asp.net-mvc-2,Asp.net,Asp.net Mvc,Validation,Asp.net Mvc 2,我有一个在主视图中渲染的局部视图。部分视图利用了System.ComponentModel.DataAnnotations和Html.EnableClientValidation() 单击链接,包含局部视图的div将显示在JQuery.Dialog()中 然后单击“保存”按钮,而不在已验证的输入字段中输入任何文本。这将导致客户端验证按预期启动,并在无效字段旁边显示“*required”消息 单击“取消”按钮时,我希望将客户端MVC验证重置回其默认状态,并删除所有消息,以备用户再次打开对话框时使用
System.ComponentModel.DataAnnotations
和Html.EnableClientValidation()
单击链接,包含局部视图的div将显示在JQuery.Dialog()中
然后单击“保存”按钮,而不在已验证的输入字段中输入任何文本。这将导致客户端验证按预期启动,并在无效字段旁边显示“*required”消息
单击“取消”按钮时,我希望将客户端MVC验证重置回其默认状态,并删除所有消息,以备用户再次打开对话框时使用。有推荐的方法吗?此答案适用于MVC3。有关将其更新为MVC4和MVC5的帮助,请参见下面的注释
如果您只想清除验证消息,以便它们不会显示给用户,您可以使用javascript这样做:
function resetValidation() {
//Removes validation from input-fields
$('.input-validation-error').addClass('input-validation-valid');
$('.input-validation-error').removeClass('input-validation-error');
//Removes validation message after input-fields
$('.field-validation-error').addClass('field-validation-valid');
$('.field-validation-error').removeClass('field-validation-error');
//Removes validation summary
$('.validation-summary-errors').addClass('validation-summary-valid');
$('.validation-summary-errors').removeClass('validation-summary-errors');
}
如果您需要重置,使其仅在弹出窗口中工作,您可以这样做:
function resetValidation() {
//Removes validation from input-fields
$('#POPUPID .input-validation-error').addClass('input-validation-valid');
$('#POPUPID .input-validation-error').removeClass('input-validation-error');
//Removes validation message after input-fields
$('#POPUPID .field-validation-error').addClass('field-validation-valid');
$('#POPUPID .field-validation-error').removeClass('field-validation-error');
//Removes validation summary
$('#POPUPID .validation-summary-errors').addClass('validation-summary-valid');
$('#POPUPID .validation-summary-errors').removeClass('validation-summary-errors');
}
$('#MyFormId input').clearErrors();
我希望这就是你想要的效果。谢谢。对于一个稍微不同的场景,我有一个类似的问题。我有一个屏幕,当你点击其中一个提交按钮时,它会下载一个文件。在MVC中,当您返回要下载的文件时,它不会切换屏幕,因此验证摘要中已经存在的任何错误消息将永远保留在那里。我当然不希望在再次提交表单后,错误消息留在那里。但我也不想清除在客户端单击submit按钮时捕获的字段级验证。此外,我的一些观点不止一种形式
我在网站的底部添加了以下代码(感谢您)。母版页适用于我的所有视图
<!-- This script removes just the summary errors when a submit button is pressed
for any form whose id begins with 'form' -->
<script type="text/javascript">
$('[id^=form]').submit(function resetValidation() {
//Removes validation summary
$('.validation-summary-errors').addClass('validation-summary-valid');
$('.validation-summary-errors').removeClass('validation-summary-errors');
});
</script>
$('[id^=form]')。提交(函数resetValidation(){
//删除验证摘要
$('.validation summary errors').addClass('validation-summary-valid');
$('.validation-summary-errors').removeClass('validation-summary-errors');
});
再次感谢。您可以点击验证库方法来执行此操作。
有两个感兴趣的对象:FormContext
和FieldContext
。您可以通过表单的\u MVC\u FormValidation
属性访问FormContext
,并通过FormContext
的字段属性访问每个已验证属性的一个FieldContext
因此,要清除验证错误,可以对表单执行类似的操作
:
var fieldContexts = form.__MVC_FormValidation.fields;
for(i = 0; i < fieldContexts.length; i++) {
var fieldContext = fieldContexts[i];
// Clears validation message
fieldContext.clearErrors();
}
// Clears validation summary
form.__MVC_FormValidation.clearErrors();
var fieldContexts=form.\uu MVC\u FormValidation.fields;
对于(i=0;i
然后,您可以将这段代码挂接到您需要的任何事件上
此(完全未记录)见解的来源:
- (提及现场环境)
- (用于指出哪些方法如何通过javascript触发客户端验证)
如果您使用MVC附带的不引人注目的验证,您只需执行以下操作:
$.fn.clearErrors = function () {
$(this).each(function() {
$(this).find(".field-validation-error").empty();
$(this).trigger('reset.unobtrusiveValidation');
});
};
----------------------------------------------------------------
第三方编辑:
在我的例子中,这主要起作用,但我必须删除$(This.find(“.field validation error”).empty()代码>行。这似乎会影响重新提交时验证消息的重新显示
我使用了以下方法:
$.fn.clearErrors = function () {
$(this).each(function() {
$(this).trigger('reset.unobtrusiveValidation');
});
};
然后这样称呼它:
function resetValidation() {
//Removes validation from input-fields
$('#POPUPID .input-validation-error').addClass('input-validation-valid');
$('#POPUPID .input-validation-error').removeClass('input-validation-error');
//Removes validation message after input-fields
$('#POPUPID .field-validation-error').addClass('field-validation-valid');
$('#POPUPID .field-validation-error').removeClass('field-validation-error');
//Removes validation summary
$('#POPUPID .validation-summary-errors').addClass('validation-summary-valid');
$('#POPUPID .validation-summary-errors').removeClass('validation-summary-errors');
}
$('#MyFormId input').clearErrors();
为了完全清除验证工件,包括消息、输入字段的彩色背景和输入字段周围的彩色轮廓,我需要使用以下代码,其中(在我的例子中)是一个包含嵌入表单的引导模式对话框
$(this).each(function () {
$(this).find(".field-validation-error").empty();
$(this).find(".input-validation-error").removeClass("input-validation-error");
$(this).find(".state-error").removeClass("state-error");
$(this).find(".state-success").removeClass("state-success");
$(this).trigger('reset.unobtrusiveValidation');
});
在这里,您可以使用简单删除错误消息
$('.field-validation-valid span').html('')
或
您只需在jQuery中定义一个新函数:
$.fn.resetValidation = function () {
$(this).each(function (i, e) {
$(e).trigger('reset.unobtrusiveValidation');
if ($(e).next().is('span')) {
$(e).next().empty();
}
});
};
然后将其用于输入字段:
$('#formId input').resetValidation();
单击Cancel按钮将关闭JQuery对话框,这将要求您在用户单击Edit按钮时构建一个新对话框。此时,MVC验证应该已经处于默认状态。如果不是(即,与对话框关联的底层DOM对象仍然包含来自上一次对话框调用的数据),正确的方法是简单地清除DOM对象中的值。感谢您的响应。我已经实现了一个类似的解决方案,但它暴露了一个额外的问题,即当单击“取消”按钮时,文本框会失去焦点,并再次启动验证!在对话框关闭之前,您将看到错误消息。解决这个问题的唯一方法是使用JQuery.Ajax调用将对话框注入到div中,以将部分视图插入到弹出窗口使用的div中。这样,当对话框关闭时,“持久性”将丢失。在调用“重置”功能之前,您不能从文本框中删除焦点吗?或者我在您的设置中遗漏了什么?我在MVC4应用程序中使用了此方法,但它保留了显示的验证错误。添加$('.validation summary errors li').remove()方法顶部的代码>修复了该问题。在MVC5验证消息中,文本仍然显示,因此我必须使用$('.field validation error').text('')清除代码>现在一年过去了,我将项目升级到VS2010、MVC3和Razor。出于某些原因,默认情况下,MVC3在使用HTML.BeginForm()helper函数时不再放置“id='form0'”标记。您必须在每个Html.BeginForm()中执行一个新的{id='form0'}。或者您必须将ClientValidationEnabled设置为true,并将UnobtrusiveJavaScriptEnabled设置为false。我最后要做的是修改jQuer