Gil*_*lit 57 asp.net-mvc datetime uri
我需要一个具有日期时间值的动作参数?有没有标准的方法来做到这一点?我需要有类似的东西:
mysite/Controller/Action/21-9-2009 10:20
Run Code Online (Sandbox Code Playgroud)
但我只是成功地用以下东西来代替:
mysite/Controller/Action/200909211020
Run Code Online (Sandbox Code Playgroud)
并编写一个自定义函数来处理这种格式.
再次,寻找一个标准或认可的ASP.net MVC方式来做到这一点.
Kur*_*ler 37
第一个示例的url中的冒号将导致错误(错误请求),因此您无法完全按照要求执行操作.除此之外,使用DateTime作为动作参数绝对是可能的.
如果您使用默认路由,示例网址的第3部分将将DateTime值作为{id}参数获取.所以你的Action方法可能如下所示:
public ActionResult Index(DateTime? id)
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
您可能希望使用Nullable Datetime,因此如果不包含此参数,则不会导致异常.当然,如果您不希望将其命名为"id",则添加另一个路径条目,将{id}替换为您选择的名称.
只要url中的文本将解析为有效的DateTime值,这就是您所要做的.像下面这样的工作正常,将在您的Action方法中选择,没有任何错误:
<%=Html.ActionLink("link", "Index", new { id = DateTime.Now.ToString("dd-MM-yyyy") }) %>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,捕获的当然是我没有包括时间.我不确定是否有任何方法可以使用冒号表示的时间格式化(有效)日期字符串,因此如果您必须在URL中包含时间,则可能需要使用自己的格式并将结果解析回一个DateTime手动.假设我们用"!"替换冒号.在actionlink中: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();
}
Run Code Online (Sandbox Code Playgroud)
编辑:如评论中所述,还有一些其他解决方案可以说比我的更好.当我最初写这个答案时,我相信我试图尽可能地保留日期时间格式的本质,但显然URL编码它将是一种更合适的处理方式.给Vlad的评论+1.
rno*_*nko 30
尝试使用toISOString().它以ISO8601格式返回字符串.
来自javascript
$.get('/example/doGet?date=' + new Date().toISOString(), function (result) {
console.log(result);
});
Run Code Online (Sandbox Code Playgroud)
来自c#
[HttpGet]
public JsonResult DoGet(DateTime date)
{
return Json(date.ToString(), JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)
Gor*_*son 13
使用刻度值.重建为DateTime结构非常简单
Int64 nTicks = DateTime.Now.Ticks;
....
DateTime dtTime = new DateTime(nTicks);
Run Code Online (Sandbox Code Playgroud)
ASP .NET MVC的URI的典型格式是Controller/Action/Id,其中Id是整数
我建议将日期值作为参数而不是作为路线的一部分发送:
mysite/Controller/Action?date=21-9-2009 10:20
Run Code Online (Sandbox Code Playgroud)
如果它仍然给您带来问题,则日期可能包含URI中不允许的字符,需要进行编码.查看:
encodeURIComponent(yourstring)
Run Code Online (Sandbox Code Playgroud)
它是Javascript中的一种方法.
在服务器端:
public ActionResult ActionName(string date)
{
DateTime mydate;
DateTime.Tryparse(date, out mydate);
}
Run Code Online (Sandbox Code Playgroud)
仅供参考,只要名称相同,任何url参数都可以映射到操作方法参数.
对于那些寻找类似答案的人来说,我想我会在MVC5中分享对我有用的东西.
我的Controller Signature看起来像这样:
public ActionResult Index(DateTime? EventDate, DateTime? EventTime)
{
}
Run Code Online (Sandbox Code Playgroud)
我的ActionLink在Razor中看起来像这样:
@Url.Action("Index", "Book", new { EventDate = apptTime, EventTime = apptTime})
Run Code Online (Sandbox Code Playgroud)
这给出了这样的URL:
Book?EventDate=01%2F20%2F2016%2014%3A15%3A00&EventTime=01%2F20%2F2016%2014%3A15%3A00
Run Code Online (Sandbox Code Playgroud)
它编码日期和时间.
| 归档时间: |
|
| 查看次数: |
108620 次 |
| 最近记录: |