您的第一个示例网址中的冒号会导致错误(错误请求),因此您无法完全按照您的要求进行操作。除此之外,绝对可以使用 DateTime 作为操作参数。
如果您使用默认路由,则示例网址的第三部分将获取 DateTime 值作为 {id} 参数。所以你的 Action 方法可能看起来像这样:
public ActionResult Index(DateTime? id)
{
return View();
}
您可能希望像我一样使用 Nullable Datetime,因此如果不包含此参数,它不会导致异常。当然,如果您不希望将其命名为“id”,请添加另一个路由条目,将 {id} 替换为您选择的名称。
只要 url 中的文本将解析为有效的 DateTime 值,这就是您所要做的。类似以下的东西可以正常工作,并且会在您的 Action 方法中被拾取而不会出现任何错误:
<%=Html.ActionLink("link", "Index", new { id = DateTime.Now.ToString("dd-MM-yyyy") }) %>
在这种情况下,问题当然是我没有包括时间。我不确定是否有任何方法可以格式化(有效)日期字符串,其时间不以冒号表示,因此如果您必须在 url 中包含时间,您可能需要使用自己的格式并将结果解析回手动日期时间。假设我们用“!”替换冒号在操作链接中:new { id = DateTime.Now.ToString("dd-MM-yyyy HH!mm") }。
您的操作方法将无法将其解析为日期,因此在这种情况下最好的选择可能是将其作为字符串接受:
public ActionResult Index(string id)
{
DateTime myDate;
if (!string.IsNullOrEmpty(id))
{
myDate = DateTime.Parse(id.Replace("!", ":"));
}
return View();
}
编辑: 正如 cmets 中所述,还有一些其他的解决方案可以说比我的更好。当我最初写这个答案时,我相信我试图尽可能地保留日期时间格式的本质,但显然 URL 编码将是一种更合适的处理方式。 +1 对弗拉德的评论。