ASP.NET MVC-Pass-datetime-Abfrage
Wie würde ich passiere ein datetime-z.B. 01/01/2011 21:01:34
als query-string?
Baue ich ein Theater Buchungs-Website und beim betrachten der Leistungen, die ich derzeit passieren die Show-und Veranstaltungsort, sondern auch übergeben müssen das Datum (da dies der einzige Teil der Leistung)
Des ActionResult sieht so aus:
public ActionResult Details(String name, String venue, String date)
{
return View(_repository.performanceDetails(name, venue, date));
}
Aber die performanceDate
wird nicht funktionieren, weil es einen datetime-Datentyp! Was ich tun müssen, ist ENTFERNEN Sie die Zeit ein Teil der Daten z.B. 00:00:00
und irgendwie bestehen die restlichen Daten werden als eine Zeichenfolge, die ich verwenden können, um zu vergleichen, gegen in etwa so:
public PerformanceDetails performanceDetails(String name, String venue, String date)
{
var PerformanceDetails = (from s in _db.PerformanceDetails
where s.show == name &&
s.venue == venue &&
s.performanceDate == date
select s).First();
return PerformanceDetails;
}
Hier ein Beispiel-link:
<%= Html.ActionLink("View Details", "Details", "Performances",
new {
name = item.show,
venue = item.venue,
date = item.performanceDate },
new {@class = "button"}) %>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie, Ihr Datum auf den querystring in einem format, das so etwas wie dieses:
Dadurch erhalten Sie eine URL wie (wenn Sie nicht mit dem Routen):
Dies ist hilfreich, weil Sie vermeiden möchten, die Schrägstriche in Ihren Termin auf den querystring, und Sie wollen explizit über den Monat/das Datum Platzierung (die ganzen US und UK). Empfehlen die Verwendung von zahlen für Datum, - und alpha-Zeichen für Monat.
In Ihrem ActionMethod, können Sie dann einfach
TryParse()
oderParse()
den eingehenden Wert.In Ihre LINQ-Abfrage können Sie etwas wie das hier tun:
Also um es alle zusammen:
/?name=Macbeth&venue=Playhouse&date=02/01/2011
The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
und es explodiert in meinem repository (also das zweite Stück des Codes) irgendwelche Ideen, was das problem ist und wie man es beheben? DankLINQ to Entities does not recognize the method 'System.DateTime AddDays(Double)' method, and this method cannot be translated into a store expression.
Erstens, das argument zu Ihrem Action-Methode eines DateTime-Typ, kein string. Sie sollten sicherstellen, dass Ihre Abfrage-string argument ist, formatiert nach ISO 8601 Extended-Format (http://en.wikipedia.org/wiki/ISO_8601), Beispiel: 2011-10-17T12:35:00.
Den Standard-Bindemittel zu konvertieren, dass die Zeichenfolge in einen Datum-ohne jedes problem. Ich fand, dass Sie benötigen zwei Ziffern hh:mm:ss, dass ist, verwenden Sie führende Nullen bei zahlen unter zehn. Können Sie weglassen der Millisekunden, die aber, und das Zeit-zone', Z' - Bezeichner.
Nun, dass Sie eine vollständige Datum und Zeit, können Sie einfach das Datum Angebot für Datenbank-lookups mit mydate.Datum.
Gibt es mehrere Möglichkeiten, wie Sie dies tun können. Eine Möglichkeit ist die Art, wie Cameron vermuten lässt. Eine andere Möglichkeit wäre, konvertieren Sie das Datum in einen numerischen Zahl, wie z.B. Zecken, dann übergeben Sie diesen numerischen Wert auf Ihre URL und konvertiert Sie zurück in Ihre Aktion-Methode.