2016-02-25 57 views
3

VC5项目的个人验证信息如何清除与jquery

我有我的Razor视图这个文本框和验证消息:

@Html.TextBoxFor(m => m.FireSrv.Size) @Html.ValidationMessageFor(m => m.FireSrv.Size)

我想清楚了(不隐藏),只是这个消息,我不想清除整个表单。

我尝试这样做,这是行不通的:

$('#FireSrv_Size').find(".field-validation-valid").remove();

FireSrv_Size是正确的,它是在表单中的字段的ID。

我在我的ViewModel实现

IValidatableObject

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
{ 
    string em = "Size is required"; 
    if (HasFireSrv) { if (string.IsNullOrEmpty(FireSrv.Size)) { yield return new ValidationResult(em, new[] { "FireSrv.Size" }); } } 
... 

这是显示在查看源代码之前和生成验证错误后:

<input id="FireSrv_Size" name="FireSrv.Size" type="text" value="" /> 
<span class="field-validation-valid" data-valmsg-for="FireSrv.Size" data-valmsg-replace="true"></span> 

<input class="input-validation-error" id="FireSrv_Size" name="FireSrv.Size" type="text" value="" /> 
<span class="field-validation-error" data-valmsg-for="FireSrv.Size" data-valmsg-replace="true">Size is required</span> 

如何清除只是一个验证消息?

+0

尝试'removeClass'。 – CrnaStena

+0

removeClass也不起作用。 – Joe

回答

0

如果您正在寻找删除它在服务器端,使用下列内容:

ModelState["FireSrv.Size"].Errors.Clear(); 

在客户端,你可以做这样的事情:

$('#FireSrv_Size").removeClass("field-validation-error"); 

看到这个jsFiddle。如果这不适合你,请告诉我。

更新1 - 经过一些研究和一些调试,这是将删除我的本地示例中的错误的代码。

var $form = $("form"); 
var $validator = $form.validate(); 

// all errors 
//var $errors = $form.find(".field-validation-error span"); 

// find just error attached to FireSrv_Size 
var $errors = $("#FireSrv_Size").next(".field-validation-error").find("span"); 

// trick unobtrusive to think the elements were successfully validated 
// this removes the validation messages 
$errors.each(function(){ 
    $validator.settings.success($(this)); 
}); 

我以这篇文章SO为出发点。

+0

我用TextBox和html更新了我的帖子。我修正了你的错字,试过$('#FireSrv_Size')。removeClass(“field-validation-error”); $('#FireSrv_Size')。removeClass(“field-validation-valid”); and $('# FireSrv.Size'); removeClass(“field-validation-valid”);错误仍然不清楚 – Joe

0

这将清除...-验证错误类和data-valmsg-for =“FireSrv.Size”的内容。第一行清除TextBox上的input-validation-error类。

var textname = '"FireSrv.Size"'; $('input:text[name=' + textname + ']').removeClass(); 
var dvmf = '"FireSrv.Size"'; $('span[data-valmsg-for=' + dvmf + ']').html(""); 
$('span[data-valmsg-for=' + dvmf + ']').removeClass("field-validation-error").addClass("field-validation-valid"); 
+0

''“FireSrv.Size \”“;'可以是'''FireSrv.Size''; –

+0

马克,好多了,我已经更新了答案,thx。 – Joe

0

我觉得有必要指出的是,从.removeClass();元素删除所有类,往往得不到预期的效果。您可以简单地使用$(".field-validation-valid").removeClass(".field-validation-valid");删除单个课程,因为您可以将您希望以此方式移除的课程作为目标。

或目标特定元素

<input id="FireSrv_Size" class="FireSrv_Size" type="text" value="" /> 
<span class="field-validation-valid" data-valmsg-for="FireSrv.Size1" data-valmsg-replace="true"></span> 

修:使用添加的类

剃刀语法:

@Html.TextBoxFor(m => m.FireSrv.Size, new { @class = "validate-my-field" }) @Html.ValidationMessageFor(m => m.FireSrv.Size) 

新的标记具有类:

<input id="FireSrv_Size" class="validate-my-field" name="FireSrv.Size" type="text" value="" /> 

代码与新类:

var myfield = $('.validate-my-field') 
myfield.removeClass('field-validation-error'); 
myfield.next('span[data-valmsg-for]').removeClass("field-validation-error").addClass("field-validation-valid").html(""); 

具体由ID:

var myfield = $('#FireSrv_Size'); 
myfield.removeClass('field-validation-error'); 
myfield.next('span[data-valmsg-for]').removeClass("field-validation-error").addClass("field-validation-valid").html(""); 

所有在一杆:

$('#FireSrv_Size').removeClass('field-validation-error').next('span[data-valmsg-for]').removeClass("field-validation-error").addClass("field-validation-valid").html(""); 

如果跨度验证数据属性页面后加渲染,您可能需要做:

$('#FireSrv_Size').removeClass('field-validation-error').next('span').filter(function(){ 
    return $('[data-valmsg-for]'); 
}).removeClass("field-validation-error").addClass("field-validation-valid").html("");