2011-01-04 8 views
1

Ich versuche, es zu bekommen, dass, wenn kein Datum auf dem Datepicker ausgewählt ist, die stattdessen null der einreichenden heutiges Datum vorlegen werden.Wenn Datetime-Wert = null dann die heutigen Datum verwendet

Wie Sie aus dem folgenden Code sehen können Ich habe schon eine Reihe von Möglichkeiten ausprobiert, aber ohne Erfolg, es gibt kein Viewmodel und es ist alles auf einer einzigen Seite, wenn ich ein Datum auf dem Datepicker es hat keine Problem.

Ansicht Seite Datumscode

<div class="rowElem"> 
    <label for="Date">Date</label> 
    <div id="cal" style="float:left;"></div> 
    <%= Html.HiddenFor(h => Model.Date)%> 
</div> 

JQuery Datepicker Code

$('#cal').datepicker({ 
      dateFormat: 'dd/mm/yy', 
      [setDefaults: ({ defaultDate: '-0d' }), 
      defaultDate: '-0d', tried both this and above line and neither worked] 
      onSelect: function (dt, inst) { 
       $('#Date').val(dt); 
      } 
     }); 

-Controller Postleitzahl für Datum erstellen

oq.Date = DateTime.Parse(fc["Date"]); 
+0

aktualisieren Codebeispiel Variablen zu beschreiben, wo sie aus und kommen in welchem ​​Zusammenhang sie verwendet werden. Haben Sie aus der Datenbank gelesen, lesen Sie aus Abfrageparametern oder was lesen Sie? Es ist nicht 100% klar, wie es (oder so nahe wie möglich) sein sollte, wenn Sie Ihre Frage stellen. –

+0

abgesehen von [HttpPost] öffentlichen ActionResult erstellen (FormCollection fc) { OPEQuestionnaire oq = neue OPEQuestionnaire(); {Das einzige Extra an Information, das ich liefern könnte, ist, dass ich in der Datenbank Nullen akzeptieren konnte, aber James konnte eine Lösung finden. – Myzifer

+0

Ich überlebe die einzige andere Sache, die jetzt zu diesem Thema nützlich wäre ist, wenn es eine jquery Lösung gibt, wie, wenn welcher Code geändert werden oder dem datepicker – Myzifer

Antwort

3

Statt Parse könnten Sie TryParse verwenden:

DateTime tmp = DateTime.MinValue; 
oq.Date = DateTime.TryParse(fc["Date"], out tmp) ? tmp : DateTime.Today; 
+0

dies, out tmp)) sollte sein, out tmp) dann gehen alle Fehler weg und wenn ich nicht die Fehler hätte, würde ich früher auf diese kommentiert. Edit-oh yeh und ich musste ändern fs zu fc – Myzifer

+0

Sorry kopiert und eingefügt von früheren Bearbeiten. Aktualisiert. – James

+0

Kinda überrascht, dass mit so vielen Ansichten dieses Thema und seine Antworten so wenige Stimmen erhalten haben. – Myzifer

1

Kannst du es nicht nur auf Server-Seite lösen? Wenn null gesendet wird, verwenden Sie das heutige Datum:

if(fs["Date"] == null) 
    oq.Date = DateTime.Now; 
else 
    oq.Date = DateTime.Parse(fc["Date"]); 

Außerdem sollten Sie wirklich aussagekräftigere Namen auf Ihren Variablen haben. Vielleicht liest jemand anderes Ihren Code in der Zukunft.

+0

hinzugefügt werden muss, sagt es noch, dass es null ist, geht in else Anweisung, nur um mir zu sagen, dass es keine gültige DateTime ist. – Myzifer

+0

Er sagt immer noch, was null ist? Ist 'fc' null? 'oq' null? Versuchen Sie, so spezifisch zu sein, wie Sie können, wenn Sie Frage usw. schreiben. Und wie gesagt, benutze beschreibende Variablennamen ... Anstatt 'fc' benutze' formCollection' wenn das was ist. –

+0

[HttpPost] public ActionResult Erstellen (FormCollection fc) { OPEQuestionnaire oq = neu OPEQuestionnaire(); {oq.date wurde als Null angezeigt – Myzifer

0

Wo fc from.If kommt seine ist eine Datenbank Frage, die Sie wahrscheinlich isnull (Feldname, getdate()) oder Similary Funktion es heute zurückkehren haben, verwenden könnte, wenn das Feld null ist.

Mysql verwendet IFNULL statt isnull.

+0

fc steht für FormCollection, da der Datepicker Teil eines Formulars ist – Myzifer

2

Versuchen Sie dies in Ihrem C#:

DateTime date; 
if (!DateTime.TryParse(fc["Date"], out date)) 
    date = DateTime.Today; 

oq.Date = date; 

Editiert: basierend auf Myzifer Kommentar.

+0

+1, gute Arbeit Quick Draw McGraw! – Brad

+0

Warum verwenden Sie 'if (etwas! = True)'? sieht komisch aus. –

+0

@Danny, guter Punkt. Ich frage mich, warum ich das gemacht habe. Fixing ... –

0

Bevor Sie das von einer Postanforderung übergebene Datum zuweisen, überprüfen Sie die Datumsdaten, um festzustellen, ob es sich um einen korrekten Wert handelt, und legen Sie sie auf das heutige Datum fest. Verwenden Sie andernfalls die Postdaten.

2
if (oq.Date == null) 
      { oq.Date = DateTime.Now; } 
      else 
      { oq.Date = DateTime.Parse(fc["Date"]); } 

Das funktionierte, in der Lage war es herauszufinden thx an Tomas Jansson und Jackson Päpste Antworten.

+0

Sobald ich genug Punkte bekommen habe, werde ich deine Antworten abstimmen. Tomas Jansson und Jackson Poppes. – Myzifer

+0

Sollte es bekannt sein, würde es nicht so einfach sein, da es jetzt keine eingegebene Antwort akzeptiert und nur das heutige Datum akzeptiert. – Myzifer

+0

Aber wenn eine unserer Antworten die war, die dir geholfen hat, solltest du eine davon als die eine akzeptieren Dein Problem wurde behoben. Ich denke jedoch, dass James Lösung die eleganteste ist. –

Verwandte Themen