Ich bin nicht sicher, ob diese Lösung auf MVC3 funktioniert. Es funktioniert sicherlich auf MVC4:
Sie können die clientseitige Validierung in der Razor-Ansicht einfach deaktivieren, bevor Sie das Feld rendern, und die clientseitige Validierung nach dem Rendern des Felds wieder aktivieren.
Beispiel:
<div class="editor-field">
@{ Html.EnableClientValidation(false); }
@Html.TextBoxFor(m => m.BatchId, new { @class = "k-textbox" })
@{ Html.EnableClientValidation(true); }
</div>
Hier deaktivieren wir die clientseitige Validierung für das Feld BatchId.
Auch dafür habe ich einen kleinen Helfer entwickelt:
public static class YnnovaHtmlHelper
{
public static ClientSideValidationDisabler BeginDisableClientSideValidation(this HtmlHelper html)
{
return new ClientSideValidationDisabler(html);
}
}
public class ClientSideValidationDisabler : IDisposable
{
private HtmlHelper _html;
public ClientSideValidationDisabler(HtmlHelper html)
{
_html = html;
_html.EnableClientValidation(false);
}
public void Dispose()
{
_html.EnableClientValidation(true);
_html = null;
}
}
Sie werden es wie folgt verwenden:
<div class="editor-field">
@using (Html.BeginDisableClientSideValidation()) {
@Html.TextBoxFor(m => m.BatchId, new { @class = "k-textbox" })
}
</div>
Wenn jemand bessere Lösungen hat, lass es mich wissen!
Ich hoffe das hilft.
Sie können die clientseitige unauffällige Validierung für ein einzelnes Feld deaktivieren, indem Sie ein
data-val='false'
Attribut hinzufügen :@Html.TextBoxFor(m => m.BatchId, new { data_val = "false" })
Dadurch wird das
data-val='true'
Attribut überschrieben , das MVC aufgrund vonSystem.ComponentModel.DataAnnotations
Attributen hinzufügt . Das HTML-Element wird weiterhin mit anderen Validierungsattributen dekoriert (z. B. Datenwert erforderlich), diese haben jedoch keine Auswirkung.( Beachten Sie den Unterstrich in
data_val
oben. MVC automatisch Unterstrichen zu Bindestriche in anonymen Typ Eigenschaften konvertiert, sodata_val
wird ,data-val
wenn die HTML - Rendering)quelle
MVC5 verwendet jquery.validate
http://jqueryvalidation.org/rules/
Wenn Sie Validierungen in MVC5 clientseitig entfernen möchten, müssen Sie Folgendes tun:
Entfernen Sie alle Überprüfungen auf 'myinput'.
$("#myinput").rules("remove");
Spezifische Validierungen
$("#myinput").rules("remove", "min max" );
Das Auflisten der Validierungen kann helfen
$("#myinput").rules();
Dann müssen Sie Ihren Code Behind korrigieren, um Ihr Modell manuell oder anders zu validieren, da
ModelState.IsValid
dies falsch ist. VerwendenModelState.Clear()
undTryValidateModel
kann dann praktisch sein.Bearbeiten:
Durch Deaktivieren des Steuerelements werden auch die Überprüfungen entfernt.
$("#myinput").attr('disabled', disabledValue);
quelle
Angenommen, Sie verwenden die unauffällige Standardüberprüfung, können Sie Javascript verwenden, um Regeln auf der Clientseite zu entfernen. Schauen Sie sich Plugins / Validation / Regeln an
quelle
Um dieses Ziel im gegebenen Szenario zu erreichen, müssen wir zwei Optimierungen vornehmen.
Client-Seite
Um die clientseitige Validierung zu deaktivieren, müssen wir sie mit Gewalt deaktivieren.
@Html.EditorFor(model => model.Password, new { htmlAttributes = new { @data_val = "false" , @class = "form-control"} })
Beachten Sie das @ data_val = "false". Dadurch wird die Validierung in diesem Feld deaktiviert.
Serverseite (in Aktion)
Wenn das Modell in der Post-Aktion überprüft wird, gibt ModelState.IsValid immer false zurück, da kein Kennwort angegeben wird. Hier müssen wir das aktuelle Passwort für das Modell angeben und das Modell erneut validieren.
var userObj = db.Users_Info.Where(a => a.Id == users_Info.Id).FirstOrDefault(); if (String.IsNullOrEmpty(users_Info.Password)) { users_Info.Password = userObj.Password; } ModelState.Clear(); TryValidateModel(users_Info);
Lassen Sie mich erklären, dass wir zuerst die aktuellen Informationen abrufen, die in der Datenbank gespeichert sind und die wir später verwenden, um sie dem aktuellen Modell zuzuweisen, wenn kein Kennwort angegeben ist. Die letzten beiden Zeilen setzen den ModelState tatsächlich zurück, um ein aktualisiertes Ergebnis für ModelState.IsValid zurückzugeben.
quelle
Ich hatte Probleme mit data_val = "true". Ich hatte eine Folge von Optionsfeldern, die an eine einzelne Eigenschaft in meinem Modell gebunden waren. Die Datenüberprüfung funktionierte nur, wenn ich data_val = "true" auf den ersten @ Html.RadioButtonFor-Aufruf angewendet habe.
Beim Debuggen habe ich festgestellt, dass Sie auch einzelne Regeln auf der Clientseite mithilfe von data_rule _ ?? deaktivieren oder ändern können. Die Regeln finden Sie in der Dokumentation zur jquery-Validierung .
zum Beispiel;
@Html.RadioButtonFor(m => m.Answer, "Yes", new { data_rule_Required = "false" }); @Html.TextBoxFor(m => m.Answer, new { data_rule_minlength = "10" }
quelle
Wenn Sie Validierungen in MVC5 clientseitig entfernen möchten, müssen Sie Folgendes tun:
$("#Email").rules("remove", { "required", "minlength", "email" } });
quelle