Exp*_* be 2 c# asp.net asp.net-mvc
这很奇怪.我有来自Http GET的日期格式数据,我使用模型类包装日期.就像这样,
// Model
public class wrapModel
{
public DateTime mydate{get; set;}
}
Run Code Online (Sandbox Code Playgroud)
和,
// controller
[HttpGet]
public void myController(wrapModel data){
Response.Write(searchModel.mydate.ToString());
}
Run Code Online (Sandbox Code Playgroud)
并使用浏览器调用控制器,myhost/home/myController/mydate = 05/05/2012
然后它打印"5/5/2012 12:00:00 AM",我预计只有5/5/2012.
我不需要时间.所以我试着解析约会.
data.mydata = DateTime.parse(data.mydata.ToString("MM/dd/yyyy"));
Run Code Online (Sandbox Code Playgroud)
但它仍然打印"5/5/2012 12:00:00 AM"
如何将格式更改为"5/5/2012"?
谁知道,请指教我〜
谢谢!
我想解析来自Http GET的日期时间格式数据.
但我也没有改变
[编辑]
感谢您的所有答案和宝贵的时间!但我仍然存在问题.请多帮帮我:)
首先,我需要DateTime格式数据,而不是字符串类型,因为我将使用Linq中的日期来检索DB日期.
我试过了,
1)
[DisplayFormat(DataFormatString="{0:MM/dd/yyyy}", ApplyFormatInEditMode=true)]
public DateTime mydate { get; set; }
[HttpGet]
public ActionResult myController(wrapModel data){
return Content(searchModel.mydate.ToString());
}
Run Code Online (Sandbox Code Playgroud)
还打印"5/5/2012 12:00:00 AM"
2)
[HttpGet]
public ActionResult myController(wrapModel data){
return Content(searchModel.mydate.ToString("MM/dd/yyyy"));
}
Run Code Online (Sandbox Code Playgroud)
它也改变了foramt,但我需要DateTime格式,所以我再次转换为DateTime.
[HttpGet]
public ActionResult myController(wrapModel data){
searchModel.mydate = DateTime.Parse(searchModel.mydate.ToString("MM/dd/yyyy"));
return Content(searchModel.mydate.ToString());
}
Run Code Online (Sandbox Code Playgroud)
然后它再次打印"5/5/2012 12:00:00 AM".
3)
searchModel.etaDate.ToString("d")
Run Code Online (Sandbox Code Playgroud)
与上面相同,转换为DateTime然后打印"5/5/2012 12:00:00 AM"
和
我使用Response.Write()进行简单的返回值测试,但是有什么重要的原因我不能使用Response.Write()方法吗?我想学习 :)
非常感谢!
[编辑]
我需要DateTime类型数据,
Repository myRespository = new Respository();
var data = (from x in myRepository.myContext
where x.thedate == mydate // thedate is datetime type, so I need datetime type for compare
select x.no).SingleOrDefault()
Run Code Online (Sandbox Code Playgroud)
我试过了,
string test = mydate.ToShortDateString();
(...
where x.thedate.ToString() == test
...)
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
如何将格式更改为"5/5/2012"?
首先,您必须使用正确格式传递参数,该格式始终 yyyy-MM-dd用于GET请求:
http://myhost/home/myController/mydate=2012-05-05
Run Code Online (Sandbox Code Playgroud)
我总是强调这个词,因为这一点非常重要.原因是默认模型绑定器在从GET请求解析日期时始终使用InvariantCulture,并且在从POST请求解析日期时使用当前区域性.有一篇很好的文章解释了这个以及这个设计决策背后的原因.
然后:
Response.Write(searchModel.mydate.ToString("MM/dd/yyyy"));
Run Code Online (Sandbox Code Playgroud)
好吧,实际上,不是Response.Write因为你从未在ASP.NET MVC应用程序中这样做,而是宁愿从控制器动作返回一个ActionResult:
[HttpGet]
public ActionResult MyAction(wrapModel data)
{
return Content(data.mydate.ToString("MM/dd/yyyy"));
}
Run Code Online (Sandbox Code Playgroud)
或者您将使用DisplayFormat属性修饰您的视图模型:
public class wrapModel
{
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
public DateTime mydate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
或者如果您想考虑当前的文化短日期格式:
public class wrapModel
{
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
public DateTime mydate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后让控制器操作将此模型传递给视图:
public ActionResult MyAction(wrapModel data)
{
return View(data);
}
Run Code Online (Sandbox Code Playgroud)
当然,在相应的强类型视图中,使用DisplayFor/ EditorForhelpers以所需的格式实现所需的输出:
@model wrapModel
<span>
@Html.DisplayFor(x => x.mydate)
</span>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2951 次 |
| 最近记录: |