So ändern Sie das 'data-val-number" - Nachricht Validierung in MVC, während es erzeugt wird, durch @Html-Helfer
Davon ausgehen, dieses Modell:
Public Class Detail
...
<DisplayName("Custom DisplayName")>
<Required(ErrorMessage:="Custom ErrorMessage")>
Public Property PercentChange As Integer
...
end class
und der Blick:
@Html.TextBoxFor(Function(m) m.PercentChange)
gehen Sie diesen html:
<input data-val="true"
data-val-number="The field 'Custom DisplayName' must be a number."
data-val-required="Custom ErrorMessage"
id="PercentChange"
name="PercentChange" type="text" value="0" />
Möchte ich zum anpassen der data-val-number
Fehlermeldung, die ich denke, hat erzeugt, weil PercentChange
ist ein Integer
. Ich war auf der Suche nach solch ein Attribut zu ändern, range
oder was auch immer im Zusammenhang funktioniert nicht.
Ich weiß, es ist eine chance, in die Bearbeitung unauffällig die js-Datei selbst oder überschreiben Sie es in der client-Seite. Ich möchte das ändern data-val-number
's Fehlermeldung, genau wie die anderen im server-Seite.
Ich habe Griffin MVC Contrib - Projekt zu lokalisieren, die Validierung Texte ohne hässliche Attribute
InformationsquelleAutor GtEx | 2011-01-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies nicht einfach sein wird. Die Standard-Nachricht gespeichert wird als eingebettete Ressource in der
System.Web.Mvc
Montage und die Methode, mit der das abrufen ist eine private statische Methode einer internen versiegelt die innere Klasse (System.Web.Mvc.ClientDataTypeModelValidatorProvider+NumericModelValidator.MakeErrorString
). Es ist, als wenn der Kerl bei Microsoft die Programmierung dieses war versteckt, streng geheim 🙂Können Sie einen Blick auf die folgenden blog-post beschreibt eine mögliche Lösung. Im Grunde müssen Sie ersetzen Sie den vorhandenen ClientDataTypeModelValidatorProvider mit einer eigenen.
Wenn Sie nicht wie die hardcore-Kodierung, die Sie benötigen, zu tun, könnte man auch ersetzen Sie diesen integer-Wert innen Ihre view-model mit einem string und haben eine benutzerdefinierte Gültigkeitsprüfung-Attribut, die tun würde, die Analyse und eine benutzerdefinierte Fehlermeldung (die könnte sogar lokalisiert werden).
remove
Sache? in meinemglobal.asax
? es ist ok dann?ja die
Providers.Remove
undProviders.Add
in derApplication_Start
Methode des Globalen.asax.Hat sich schon jemand in der Lage, etwas ähnliches zu tun, aber in der Lage sein, um den Text zu erstellen, basierend auf andere Werte aus dem Objekt, das die Anzahl ist, die validiert wird, auf? z.B., wenn mein Objekt hatte "Eingabeaufforderung" und "Wert", meine Nachricht würde sagen, "{Prompt} muss eine Zahl sein." Oder muss ich tun, object validation?
Blick in den Sourcecode der MVC 4, wie es aussieht ist es behoben wird uns erlauben, zu spezifizieren unsere eigenen
ResourceClassKey
aspnetwebstack.codeplex.com/SourceControl/changeset/view/...Ja. Ersetzen ResourceClassKey und mit dem Namen FieldMustBeNumeric arbeitete in diesem Fall. Für Erforderlich und Ungültige Fehler Schweinereien verwenden Sie diesen anderen Ansatz, der auch die sugested von Darin Dimitrov stackoverflow.com/questions/12545176/...
InformationsquelleAutor Darin Dimitrov
Können Sie überschreiben Sie die Nachricht, indem der data-val-Nummer Attribut selbst wenn die rendering-Bereich. Dies überschreibt die Standard-Nachricht. Dies funktioniert zumindest mit MVC 4.
Denken Sie daran, dass Sie verwenden müssen, Unterstrich in der Attribut name für den Rasierer zu akzeptieren, Ihr Attribut.
Dieser arbeitete für mich, aber in meinem Fall wollte ich nur, um es auszuschalten. data_val="false" aus.
Ich kann nicht sehen wie das funktionieren würde. Wenn dies eine neue
htmlAttributes
- Objekt, es könnte funktionieren, aber eineadditionalViewData
Objekt, so bekommst du nur ein zusätzliches Attribut namensdata_val_number
.Funktioniert großartig für mich, vielen Dank für das spart mir einen Haufen Zeit 🙂
Ich Stimme mit @Sprintstar. Es funktionierte nicht für mich, aber
@Html.EditorFor(model => model.age, new { htmlAttributes = new { @class = "form-control", data_val_required = "Field required"} })
haben.InformationsquelleAutor HenningJ
Was Sie tun müssen, ist:
Fügen Sie den folgenden code innerhalb
Application_Start()
imGlobal.asax
:Rechts klicken Sie auf Ihre ASP.NET MVC-Projekt in VS. Wählen Sie
Add => Add ASP.NET Folder => App_GlobalResources
.Hinzufügen
.resx
Datei namensMessages.resx
in diesem Ordner.Fügen Sie diese Zeichenfolge-Ressourcen in der
.resx
Datei:Ändern Sie die
FieldMustBeNumeric
Wert, wie Sie wollen... 🙂Fertig.
Überprüfen Sie diesen Beitrag für weitere Informationen:
Lokalisierung der Standard-Fehler-Nachrichten, die in ASP.NET MVC und WebForms
Während @DarinDimitrov hat eine gültige Lösung, für mich sollte dies die akzeptierte Antwort, wie es verwendet eine integrierte erweiterbaren Mechanismus, anstatt Sie zu kopieren das ganze .Net-Klasse und zu ändern, die viel weniger wartbar
Dies ist wirklich die beste Antwort für diese Frage.
Coad. Ja, es ist die beste - und no frills Antwort auf diese Frage. Kann ich bestätigen, es funktioniert in MVC 4 und MVC 5
InformationsquelleAutor Leniel Maccaferri
Als ein alternativer Weg, um dieses, bewarb ich mich eine RegularExpression-Attribut fangen Sie den ungültigen Eintrag und meine Nachricht gibt es:
Diese leicht ein hack, aber dies schien vorzuziehen, um die Komplexität der anderen Lösungen vorgestellt, zumindest in meiner besonderen situation.
EDIT: Das funktionierte gut in MVC3 aber es scheint, es kann gut sein, bessere Lösungen für das MVC4 -+.
Kein argument, es ist ein bisschen ein hack. Meine einzige Verteidigung, dass es extrem einfach zu überschreiben einer Fehlermeldung in den Rahmen.
Auch der richtige Weg, es zu tun wäre, um es werden überschreiben,-können auf einfache Art und Weise...aber da wir das nicht tun, ich bin froh Sie gefunden meine Gedanken hilfreich.
Scheint, wie die dollar, die ich nicht brauche, vielleicht ^ und $ sind die impliziten dann.
Ich kenne die OP nur das, was ein integer, aber das wird außer Kontrolle geraten schnell, wenn man bedenkt, Dezimalzahlen und i18n?
InformationsquelleAutor Matthew Nichols
Aus diesem Buch auf MVC 3, die ich habe. Alles, was Sie zu tun haben ist dies:
Beachten Sie, wie die ErrorMessage ist ergab, geben Sie die aktuelle Kultur und die lokalisierte Meldung extrahiert aus der ValidationMessages(hier werden Kultur, Besonderheiten).resx Ressource-Datei. Wenn Sie nicht brauchen, dass, nur ersetzen Sie es mit Ihrer eigenen Mitteilung.
yield return
im vb.net, zwar gibt es eine Arbeit um. Noch habe ich nicht bekommen, die Vorteile dieser Lösung.Ich mag diese Lösung. Eine Frage: wir ersetzen den bisherigen Anbieter mit einem neuen. Was ist, wenn der bestehende Anbieter verwendet, um zu tun mehr als nur diese Validierung? Ist es gewährleistet, dass durch das entfernen, sind wir nicht gegen irgendwelche anderen Funktionen?
MVC 4 vielleicht?
InformationsquelleAutor Denis Valeev
Hier ist eine andere Lösung, welche änderungen die Meldung der client-Seite, ohne geändert MVC3-Quelle. Volle details in diesem blog-post:
https://greenicicle.wordpress.com/2011/02/28/fixing-non-localizable-validation-messages-with-javascript/
Kurz, was Sie tun müssen ist, umfassen das folgende Skript nach jQuery Validierung geladen wird, plus die passende Lokalisierungs-Datei.
InformationsquelleAutor Phil Hale
Können Sie festlegen, ResourceKey von ClientDataTypeModelValidatorProvider-Klasse name einer globalen Ressource, enthält FieldMustBeNumeric Schlüssel zu ersetzen mvc validation-error-Meldung, die Nummer mit Ihrer benutzerdefinierten Nachricht. Auch der Schlüssel von Datum Validierung Fehlermeldung FieldMustBeDate.
ResourceClassKey
aber nichtResourceKey
InformationsquelleAutor reza taroosheh
Hier ist eine andere Lösung in reinem js, das funktioniert, wenn Sie angeben möchten, die Nachrichten weltweit nicht benutzerdefinierte Meldungen für jedes Element.
Der Schlüssel ist, dass die Validierung von Nachrichten gesetzt werden mit
jquery.validation.unobtrusive.js
mit derdata-val-xxx
- Attribut auf jedes element, so dass alle Sie tun müssen ist, solche zu ersetzen, die Nachrichten, bevor die Bibliothek verwendet werden, ist es ein bisschen schmutzig, aber ich wollte nur, um die Arbeit zu erledigen und schnell, also hier geht es für die Anzahl der Typ-Validierung:die gute Sache ist, dass es nicht erforderlich zusammenstellen und erweitern zu können, ist es später einfach, nicht robust, aber schnell.
InformationsquelleAutor mohas
Check this out:
Die Komplette Anleitung Zur Validierung In ASP.NET MVC 3 - Teil 2
Wichtigsten Teile der Artikel-Folgen (kopieren-einfügen).
Gibt es vier verschiedene Teile zu erstellen eine voll funktionsfähige benutzerdefinierte validator-das funktioniert auf dem client und dem server. Zuerst haben wir eine Unterklasse
ValidationAttribute
und fügen Sie unsere server-seitige Validierung Logik. Als Nächstes implementieren wirIClientValidatable
auf unserer Attribut zu ermöglichen, HTML5 -data-*
Attribute werden an den client weitergegeben. Drittens, wir schreiben eine benutzerdefinierte JavaScript-Funktion, die führt eine Validierung auf dem client. Schließlich erstellen wir einen adapter für die Transformation der HTML5-Attribute in ein format, dass unsere benutzerdefinierte Funktion verstehen können. Während das klingt wie eine Menge Arbeit, sobald Sie begannen Sie werden finden, dass es relativ einfach.Unterklassen ValidationAttribute
In diesem Beispiel schreiben wir eine NotEqualTo validator, der einfach prüft, ob der Wert einer Eigenschaft nicht gleich dem Wert eines anderen.
Fügen Sie das neue Attribut, um die password-Eigenschaft RegisterModel und führen Sie die Anwendung.
Umsetzung IClientValidatable
ASP.NET MVC 2 hatte einen Mechanismus für das hinzufügen von client-seitige Validierung, aber es war nicht sehr schön. Zum Glück in MVC 3, haben sich die Dinge verbessert und der Prozess ist jetzt ziemlich trivial, und zum Glück nicht beinhalten die änderung der
Global.asax
als in der vorherigen version.Den ersten Schritt für Ihre benutzerdefinierten Validierung Attribut zu implementieren IClientValidatable. Dies ist eine einfache, eine Methode, Schnittstelle:
Wenn Sie die Anwendung jetzt und Quelltext anzeigen, sehen Sie, dass die Passwort-Eingabe html enthält nun Ihre
notequalto
data-Attribute:Erstellen einer benutzerdefinierten jQuery-validate-Funktion
Alle dieser code wird am besten in einer separaten JavaScript-Datei.
Je nach Ihrer Validierung Anforderungen, können Sie feststellen, dass die jquery.überprüfen Bibliothek, hat bereits den code, den Sie für die Prüfung selbst. Es gibt viele Regeln in jquery.überprüfen Sie, dass die noch nicht umgesetzt wurden bzw. zugeordnet, Daten, Anmerkungen, so, wenn diese erfüllen müssen, dann brauchen Sie, um schreiben in javascript ist ein adapter oder gar ein Aufruf einer built-in-adapter kann so wenig als eine einzige Zeile. Werfen Sie einen Blick in jquery.validate.js, um herauszufinden, was verfügbar ist.
Über eine vorhandene jquery.überprüfen.unauffällige adapter
Den job der adapter ist zu Lesen, der HTML5 -
data-*
Attribute auf Ihre form-element und wandelt diese Daten in einer form, die verstanden werden können, indem Sie jquery.validieren und Ihre benutzerdefinierten validierungsfunktion. Sie sind nicht verpflichtet, alles zu tun, die Arbeit selbst, obwohl in vielen Fällen können Sie den Aufruf einer built-in-adapter. jquery.überprüfen.unauffällig deklariert drei built-in-Adapter, die verwendet werden können, in der Mehrheit der Situationen. Diese sind:Wenn Ihr validator passt nicht in eine dieser Kategorien, müssen Sie schreiben Sie Ihre eigenen adapter mit der
jQuery.validator.unobtrusive.adapters.add
Methode. Das ist nicht so schwer wie es klingt, und wir werden ein Beispiel finden Sie später in diesem Artikel.Verwenden wir die
addSingleVal
Methode übergeben Sie den Namen des Adapters und der name des einzigen Wert, den wir weitergeben wollen. Sollten Sie den Namen der Validierung Funktion unterscheiden sich aus dem adapter können Sie einen Dritten parameter (ruleName
):Zu diesem Zeitpunkt, unsere benutzerdefinierte validator-abgeschlossen ist.
Zum besseren Verständnis beziehen sich auf die Artikel selbst präsentiert, die weitere Beschreibung und ein komplexeres Beispiel.
HTH.
getan. Bitte upvote.
InformationsquelleAutor Kamran
Habe ich nur dieses und dann ein regex-Ausdruck:
InformationsquelleAutor Rob
Oder Sie können einfach tun dies.
Hoffe, das hilft.
InformationsquelleAutor Edward Disi
Habe ich dieses problem in KendoGrid, benutze ich ein Skript am ENDE der Ansicht zu überschreiben, data-val-Nummer:
Und zumindest am Ende, das ich gesagt:
InformationsquelleAutor Hernaldo Gonzalez
Mache ich dieses, meiner Ansicht
InformationsquelleAutor Fernando Campos