我如何通过日期时间,例如01/01/2011 21:01:34
作为查询字符串?
我正在建立剧院预订网站,在观看表演时,我目前通过了演出和场地,但也需要通过日期(因为这是演出的独特部分)
ActionResult看起来像这样:
public ActionResult Details(String name, String venue, String date)
{
return View(_repository.performanceDetails(name, venue, date));
}
但是performanceDate
不会起作用,因为它是一个日期时间数据类型!我需要做的是删除数据的时间部分,例如00:00:00
并以某种方式将剩余数据作为字符串传递,我可以用它来比较,如下所示:
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;
}
以下是一个示例链接:
<%= Html.ActionLink("View Details", "Details", "Performances",
new {
name = item.show,
venue = item.venue,
date = item.performanceDate },
new {@class = "button"}) %>
答案 0 :(得分:6)
首先,Action方法的参数应该是DateTime类型,而不是字符串。您应确保使用ISO 8601扩展格式(http://en.wikipedia.org/wiki/ISO_8601)格式化查询字符串参数,例如:2011-10-17T12:35:00。
默认活页夹会将该字符串转换为没有任何问题的日期。我发现你需要两个数字用于hh:mm:ss,也就是说,对于10以下的数字使用前导零。您可以省略毫秒数和时区“Z”说明符。
既然您有完整的日期和时间,您只需使用日期部分使用mydate.Date进行数据库查找。
答案 1 :(得分:4)
尝试使用以下格式将日期放在查询字符串上:
item.performanceDate.ToString("dd-MMM-yyyy")
这将为您提供一个URL(如果您没有使用路线):
http://foo/Performance/Details?name=someName&venue=someVenue&date=31-Mar-2011
这很有用,因为您希望避免在查询字符串中显示日期中的斜杠,并且您希望明确说明月份/日期位置(整个美国和英国)。建议使用日期数字和月份字母字符。
在ActionMethod中,您可以简单地TryParse()
或Parse()
传入的值。
var dt = DateTime.Parse(date);
在您的LINQ查询中,您可以执行以下操作:
&& s.performanceDate == dt
所以要把它们放在一起:
public ActionResult Details(String name, String venue, String date)
{
DateTime dt;
if (DateTime.TryParse(date, out dt))
{
return View(_repository.performanceDetails(name, venue, dt));
}
else
{
return View("Error", "The value passed in date isn't a date value.");
}
}
public PerformanceDetails performanceDetails(String name, String venue, DateTime dt)
{
var PerformanceDetails = (from s in _db.PerformanceDetails
where s.show == name &&
s.venue == venue &&
s.performanceDate == dt.Date
select s).First();
return PerformanceDetails;
}
<%= Html.ActionLink("View Details", "Details", "Performances",
new { name = item.show ,
venue = item.venue,
date = item.performanceDate.ToString("dd-MMM-yyyy") },
new {@class = "button"}) %>
答案 2 :(得分:2)
有几种方法可以做到这一点。一种方式是Cameron建议的方式。另一种方法是将日期转换为数字,例如刻度,然后在URL上传递此数值并将其转换回Action方法。
Int64 ticks = dateOfShow.Ticks;
DateTime newDateOfShow = new DateTime(ticks);