MVC3 Unaufdringlich Datum Überprüfung auf einer benutzerdefinierten formatierten Datum
Ich habe ein Feld "Datum" (ich verwende das jquery ui datepicker) in einer form, die ich formatiert habe, etwa so:
ViewModel
[DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}", ApplyFormatInEditMode = true)]
public DateTime FooDate { get; set; }
Ansicht
@Html.EditorFor(m => m.FooDate)
Diese korrekt zeigt das Datum, die Art, wie ich es haben wollen, z.B. 09-Nov-2011
Das problem, das ich immer bin, tritt auf, wenn ich drücken Sie senden. Es sagt mir, das Datum ist nicht gültig.... Es gilt, Sie dummes Ding!
Gibt es eine Möglichkeit, die ich bekommen kann jquery/unobtrusive javascript ignorieren Sie dieses Feld, oder erlauben, dieses format zu übergeben? So weit, die einzige Art, wie ich die form zu arbeiten, ist, wenn ich nicht das Datum zu formatieren, oder verwenden Sie {0:d} als Datum-format für Sie.
Bearbeiten:
Ich habe ein völlig eigenes layout+view+controller+Modell für die Erprobung dieses blöde Ding. Funktioniert immer noch nicht im IE/Safari.
Ich habe die neuste jquery.validate/unauffällig Dateien von nuget.
Meine layout
leer ist. Es nur lädt Sie die folgenden Dateien:
"jquery-1.7.min.js"
"jquery-ui-1.8.16.min.js"
"jquery.validate.min.js"
"jquery.validate.unobtrusive.min.js"
Meine TestViewModel ist einfach:
public class TestViewModel
{
[Display(Name = "Test Date:")]
[DisplayFormat(DataFormatString = "{0:dd/MMM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? TestDate { get; set; }
}
Meine TestController geht wie folgt:
public class TestController : Controller
{
public ActionResult Index()
{
var m = new TestViewModel();
m.TestDate = DateTime.Now;
return View(m);
}
}
Meiner Sicht:
@using (Html.BeginForm())
{
ViewContext.FormContext.ValidationSummaryId = "valSumId";
@Html.ValidationSummary(false, "The following errors were found:");
@Html.AntiForgeryToken()
@Html.LabelFor(m => m.TestDate)
<input type="date" id="TestDate" value="@Model.TestDate.Value.ToString("dd/MMM/yyyy")" />
<input type="submit" />
}
No worky.
Wissen Sie, was das ärgerliche Sache ist? Wenn ich TestDate
einen string, es immer noch nicht.
- haben Sie das gleiche Datum-format, wenn Sie erklären den datepicker? $('#date').datepicker({ constrainInput: true, dateFormat: 'D, dd-M-yy'... so etwas wie dieses
- Ja, habe ich. Lade ich eine Standard-Datum, aus der Sicht, wenn die Seite geladen wird, und es immer noch nicht, wie es
- Für meinen Fall, ich dint-format das Datum in das Modell, ich mache es direkt in der Ansicht mithilfe von string.format, Validierung übergeben. Vielleicht können Sie einen Versuch haben 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, es ist ein problem mit dem Bindestrich ("-") in den format-string:
Scheint es, dass unauffällig die Validierung nicht akzeptiert Bindestrich für die Formatierung des Datums standardmäßig.
In meinem Fall hatte ich zum hinzufügen von benutzerdefinierten client-side-Methode:
als umgesetzt hier
So wie es aussieht jquery.überprüfen.unauffällig hat ein problem mit
input type="date"
. Das muss ein bug, der tritt nur im IE und Safari.Wenn ich entfernt die unaufdringliche js-Datei, legte Sie die form in Ordnung. Wenn ich fügte hinzu, die unaufdringlich js-Datei zurück und verändert die input type text, es funktionierte.
Nervigen bug. Behoben werden muss.
Es gibt wirklich zwei Dinge hier:
Beide sollten das gleiche format für diese zu arbeiten. Lassen Sie uns zunächst beschäftigen sich mit der server-seitige Validierung. Sie können eine benutzerdefinierte Modell-binder für die Datumzeit-Felder, die mit dem angegebenen format für die Anzeige, wenn Sie verbindlich zurück. Hier ist ein Beispiel eines solchen Modells binder.
Als Nächstes müssen wir befassen sich mit client-seitige Validierung. Für diese könnten Sie schreiben eine benutzerdefinierte Regel, die angebracht werden, um die angegebenen Elemente:
Könnten Sie auch Adapter mit einem benutzerdefinierten Attribut.
Für meinen Fall verwende ich das text-Feld für das Datum, damit es nicht zu Problemen führen für die jquery-Validierung:
Also, warum nicht Sie versuchen, formatieren Sie Ihr Datum wie dieser, statt mit der Eingabe Typ=Datum?
Hoffe, dies hilft 🙂
Eigentlich ist es nicht Fehler in der browser -, client-Validierung können Probleme auftreten, da der MVC-Fehler (auch in der MVC 5) in jquery.validate.unobtrusive.min.js die nicht akzeptieren date/datetime-format in irgendeiner Weise. Leider haben Sie es zu lösen manuell.
Meine endlich funktionierende Lösung:
Haben Sie vor:
Können Sie installieren moment.js Verwendung:
Und dann kann man schließlich hinzufügen, fix für Datum-format-parser:
Als lukyer gepostet, kann es zu Problemen in Bezug auf die jquery.validieren*.min.js Dateien, vor allem, wenn Sie Hinzugefügt haben, Ihre eigenen Validierung in den Dateien. Die einfache Antwort, die ich gefunden, die für mich gearbeitet, wenn die final-release-system nicht überprüft werden Termine im IE (Chrome funktionierte ohne Problem) war, entfernen Sie einfach die pre-packaged minified-Validierung-Dateien vollständig und lassen Sie das Tier umgehen eigenen minifizierung von der "master" - Dateien. Nur schade, dass ich nicht verbinden lukyer die Antwort auf die Lösung früher...
(Ich würde wahrscheinlich diesen post als Kommentar, aber anscheinend habe ich noch nicht gesammelt genug rep: must try harder!)
Haben Sie versucht, einfach die änderung der Art zu:
Ich hatte das gleiche Problem mit "EditorFor" ... also habe ich es geändert und dann meine jquery-datepicker-der "date" - Klasse Hinzugefügt, um die textbox.
Wollte einen kleinen Kommentar auf dieser Linie, wenn jemand anderes Probleme mit diesem später:
In einigen Fällen (zumindest meinem Fall früher) diese übersetzen würde in diesem format: "01.01.2012", denn bei einigen Kulturen können Sie nicht angeben, Schrägstriche, wie, dass tatsächlich erhalten, formatiert wie, dass, wird es einfach schalten Sie Sie in den Punkten, also musste ich schreiben:
Gab mir "01/01/2012".
Ziemlich alt dieser thread. Gerade hier haben ähnliche Probleme. In einem anderen thread habe ich gelesen, dass es könnte ein Problem mit der Version Inkompatibilität von all diesen *.js-Bibliotheken involfed irgendwie in der Validierung.
Vielleicht ist der folgende link kann helfen, anderen Lesern landig hier:
https://stackoverflow.com/a/16551039
Hoffe, das hilft
Ich hatte das gleiche Problem, es treibt mich Bananen! Im Prinzip, mvc-Validierung wird immer Rendern DateTime-Objekte erfordern einen Wert auf der textbox. Warum? Denn es ist direkt verbunden mit einem
DateTime
Objekt. Wenn Sie erklären, IhreViewModel
mit ein ? symbol, Sie wird es null-Werte zu. Auf diese Weise wird es nicht stören, dass Sie Validierung:Hoffe, das hilft