在文本框上手动设置不显眼的validation错误

我正在做类似于远程validation的事情,除了我已经通过jquery手动调用我的调用并设置我必须设置的内容。

现在我的问题是,如果我想告诉validation器特定文本框无效(并阻止页面提交,突出显示文本框等)。 我怎么从代码中做到这一点?

@Html.LabelFor(m => Model.Slug) @Html.TextBoxFor(m => Model.Slug)  if (error) { $('#UrlMsg').html('This name is already in use.').fadeIn('fast'); //what should I do here for the rest of the validation? } 

首先,您可以添加validation摘要:

 @Html.ValidationMessageFor(m => m.Slug) 

然后,您可以使用.showError方法手动触发jQueryvalidation/不显眼validation。 这是一个示例:

 var errorArray = {}; errorArray["Slug"] = 'Some error message for the Slug text box'; $('#SomeFormId').validate().showErrors(errorArray); 

你也可以这样做:

 @Html.ValidationMessageFor(m => m.Slug) 

在您的代码中使用此function:

 function setError(id, message) { var span = $("span[data-valmsg-for=\"" + id + "\"]"); if (span && span.length > 0) { $(span).html(message); if (message && message != "") { $(span).removeClass("field-validation-valid"); $(span).addClass("field-validation-no-valid"); } else { $(span).removeClass("field-validation-no-valid"); $(span).addClass("field-validation-valid"); } } } 

然后可以设置错误

 setError("Slug", "errorMsg"); 

使用showErrors不允许错误持续存在,因此运行.valid()会清除错误。 相反,我添加了一个“forcibleerror”规则和一个javascript方法来设置消息。

 function forceError(element, errorMessage) { $(element).rules("add", { forcibleerror: true, messages: { forcibleerror: function () { return errorMessage; } } }); var isForced = false; if (errorMessage) { isForced = true; } $(element)[0].dataset.isForced = isForced; $(element).valid(); } $.validator.addMethod("forcibleerror", function (value, element) { return $(element)[0].dataset.isForced !== "true"; }); 

用法:

 forceError($('#Slug'), 'my custom message'); 

要将其恢复为有效状态:

 forceError($('#Slug'), '');