如何使用jquery

时间:2016-02-25 18:05:40

标签: javascript jquery validation razor unobtrusive-validation

VC5项目

我的Razor视图中有这个TextBox和Validation消息:

  

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

我想清除(不隐藏)此消息,我不想清除整个表单。

我尝试了这个并且它不起作用:

  

$('#FireSrv_Size&#39)。发现("点域验证-有效&#34)。除去();

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

我已实施

  

IValidatableObject

在我的ViewModel中。

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" }); } }
 ...

这是在生成验证错误之前和之后在View source中显示的内容:

 <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>

如何清除那条验证消息?

4 个答案:

答案 0 :(得分:1)

我觉得有必要指出.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>

修订:使用添加的课程

Razor语法:

@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("");

答案 1 :(得分: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作为起点。

答案 2 :(得分:0)

这清除了......- validation-error类和data-valmsg-for =&#34; FireSrv.Size&#34;的内容。第一行清除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");

答案 3 :(得分:0)

您可以使用$(".field-validation-error").empty()清除所有验证错误消息。 使用.remove().hide()可以从屏幕上删除错误消息,即使提交时有任何错误也不会再次显示。

希望这有助于解决清除验证错误消息的主要目的。