Establecer manualmente un error de validación discreto en un cuadro de texto

Estoy haciendo algo similar a la validación remota, excepto que ya realizo mis llamadas manualmente a través de jquery y configuré todo lo que tenía que configurar.

Ahora mi problema es que si quiero decirle al validador que un determinado cuadro de texto no es válido (y evita que la página se envíe, resalte el cuadro de texto, etc.). ¿Cómo podría hacer esto desde el código?

@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? } 

Primero, puede agregar un resumen de validación:

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

Luego puede activar manualmente la validación de jQuery / validación no intrusiva con el método .showError. Aquí hay una muestra:

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

También puedes hacer:

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

Con esta función en tu código:

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

Entonces puede configurar el error

 setError("Slug", "errorMsg"); 

El uso de showErrors no permitió que el error persistiera, por lo que la ejecución de .valid () borró el error. En cambio, agregué una regla de “forcererror” y un método de javascript para configurar el mensaje.

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

Uso:

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

Para devolverlo a un estado válido:

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