.net视图中日期格式化
昨天在做一个功能,要在界面上按照规定的格式显示一个时间,如果直接在expression那里格式化的话(如下:)
- @Html.DisplayFor(c => Convert.ToDateTime(c.IssueDate).ToString("yyyy-MM-dd HH:mm:ss"), new
- {
- @class = "form-control",
- onFocus = "WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',alwaysUseStartDate:true})",
- @placeholder = "签发日期"
- })
以上情形,执行期间会报拒绝访问的问题,当然这并非难事,解决方案有好几种(本人前端时间控件用的是My97Datepicker):
(ps.这里忽略那种非绑定Model的情形,因为不绑定Model那种情况,就只是显示一个时间的话,就可以直接用ToString(string format)就可以格式化时间格式了;同时也可以使用format的简写,format简写可以参考:http://www.cnblogs.com/shaocm/archive/2012/08/15/2639998.html)
第一种,最简单的是直接在后台把该字段在后台使用ToString(string format)格式化好规定的格式,再绑定在前台,因为个人在这里是使用AutoMap直接把数据库的值映射到该Model上的,故此方法看起来有些别扭,故不用此方法。
第二种,如果你只是需要在界面上显示,并非可编辑的情况的话,比如:
- @Html.DisplayFor(c => c.IssueDate, new
- {
- @class = "form-control",
- onFocus = "WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',alwaysUseStartDate:true})",
- @placeholder = "签发日期"
- })
这时候,你直接可以在Model的属性上面加上如下注解:
- /// <summary>
- /// IssueDate
- /// </summary>
- [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd HH:mm:ss}")]
- public DateTime? IssueDate { get; set; }
这样就可以通过注解直接控制该属性的日期显示格式了,这里要注意,如果视图界面上使用的并非是@Html.DisplayFor,而是使用@Html.TextBoxFor或者是@Html.EditorFor的话,该注解格式化则不起作用。
第三种,如果界面上使用的是@Html.EditorFor的话,这时也可以通过加上另外一个注解来控制界面显示格式,如下:
- /// <summary>
- /// IssueDate
- /// </summary>
- [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd HH:mm:ss}")]
- public DateTime? IssueDate { get; set; }
然后界面上使用:
- @Html.EdittorFor(c => c.IssueDate, new
- {
- @class = "form-control",
- onFocus = "WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',alwaysUseStartDate:true})",
- @placeholder = "签发日期"
- })
这样也可以通过该注解来控制日期显示格式。
第四种,如果界面上要求使用@Html.TextboxFor来显示的话,如下:
- @Html.TextBoxFor(m => m.RemittanceDate, new { @class = "form-control validate[required]", onFocus = "WdatePicker({startDate:'%y-%M-01',dateFmt:'yyyy-MM-dd',alwaysUseStartDate:true})", @placeholder = "请输入汇款日期" })
,则以上两个注解的格式控制都不起作用,这时候,也有三种解决方法,如下:
①使用@Html.TextBoxFor的重载函数,其中一个是有string format参数的(推荐此方式),如下:
- @Html.TextBoxFor(m => m.RemittanceDate, "{0:yyyy-MM-dd}", new { @class = "form-control validate[required]", onFocus = "WdatePicker({startDate:'%y-%M-01',dateFmt:'yyyy-MM-dd',alwaysUseStartDate:true})", @placeholder = "请输入汇款日期" })
②使用如下方法也可以(推荐此方式):
- @Html.TextBoxFor(m => m.RemittanceDate, new { @class = "form-control validate[required]", Value = String.Format("{0:yyyy-MM-dd}", Model.RemittanceDate), onFocus = "WdatePicker({startDate:'%y-%M-01',dateFmt:'yyyy-MM-dd
- ',alwaysUseStartDate:true})", @placeholder = "请输入汇款日期" })
③以下也是类似方式:
- @Html.TextBoxFor(c => c.IssueDate, new
- {
- @class = "form-control",
- Value = Convert.ToDateTime(Model.ShipBeginTime).ToString("yyyy-MM-dd HH:mm:ss"),
- onFocus = "WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',alwaysUseStartDate:true})",
- @placeholder = "签发日期"
- })
以上第③中方法,要注意,一定要加上Convert.ToDateTime()转换成时间类型,否则后面的ToString(string format)函数会报说不存在带有一个参数的重载,这是因为ToString()函数是积累Object的通用函数,DateTime类型重载了该方法,
DateTime类型的ToString()方法可以带一个参数也可以不带,所以要强制转换成DateTime类型才能使用ToString(string format)函数格式化。
以上是使用MS 的Mvc,如果是传统的WebForm的话,使用<%#Eval("PA_STATUS")%>这种方式绑定值的话,Eval()也是有重载函数带有格式化参数可以控制显示格式的,不过WebForm我记得有时候要使用Eval,有时候要使用DataBind()
函数的,具体忘了,有知道的希望可以在评论那里告知,谢谢!
ps.以上几种方式,建议使用楼主推荐的那两种,因为其他那几种方式,如果Model里面的该字段是空的话,推荐的那两种方式初始化界面是空的,但是另外那几种方式则不显示空,一般是显示:0001-01-01 00:00:00之类的非标准时间的显示,以上推荐的那两种方法就不会出现如此问题。针对另外那几种方法出现的时间初始显示时间的问题,一下为解决方案:
例如:如下,如果ShipBeginTime为null的话,则界面初始时间则显示为0001-00-00 00:00:00之类的非法时间:
- @Html.TextBoxFor(c => c.IssueDate, new
- {
- @class = "form-control",
- Value = Convert.ToDateTime(Model.ShipBeginTime).ToString("yyyy-MM-dd HH:mm:ss"),
- onFocus = "WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',alwaysUseStartDate:true})",
- @placeholder = "签发日期"
- })
,此时如果要默认显示为空的话,则要手动调整一下,修改如下便可:
- @Html.TextBoxFor(c => c.ShipBeginTime, new
- {
- @class = "form-control validate[required]",
- Value = Model.ShipBeginTime == null ? "" : Convert.ToDateTime(Model.ShipBeginTime).ToString("yyyy-MM-dd HH:mm:ss"),
- onFocus = "WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',alwaysUseStartDate:true})",
- @placeholder = "货船起运时间"
- })
另外,如果是格式化数字的话,也类推过去就可以了,可以搜索下String.Format()函数是如何格式化的,例如,要保留两位小数,如下:
- Html.TextBoxFor(m => m.ChargeMoney, new { Value = String.Format("{0:F2}", Model.ChargeMoney), @class = "form-control validate[required]", @readonly = "readonly" })
其他情况如此类推,读者自己脑补了~不懂的可以留言。
此文章到此截止
.net视图中日期格式化的更多相关文章
- c#中日期格式化
c#的日期格式化比较简单,在ToString中设置日期格式即可 DateTime.Now.ToLocalTime().ToString("yyyy_MM_dd_hh_mm_ss") ...
- 震惊!java中日期格式化的大坑!
前言 我们都知道在java中进行日期格式化使用simpledateformat.通过格式 yyyy-MM-dd 等来进行格式化,但是你知道其中微小的坑吗? yyyy 和 YYYY 示例代码 @Test ...
- Java中日期格式化的实现算法
package com.study.test; import java.io.Serializable; import java.text.SimpleDateFormat; import java. ...
- GWT 中日期格式化 ,处置Date
GWT的view中不能用java原生的DateFormat 必须使用gwt封装的格式化方法,方法如下 import com.google.gwt.i18n.client.DateTimeFormat; ...
- SQL SERVER 中日期格式化,及GETDATE()、CONVERT()函数使用说明
1. date和datetime类型的区别 date是SQL Server 2008新引进的数据类型.它表示一个日期,不包含时间部分,可以表示的日期范围从公元元年1月1日到9999年12月31日.只需 ...
- Java中日期格式化YYYY-DD的坑
写这篇博文是记录下跨年的bug.去年隔壁组的小伙伴就是计算两个日期之间间隔的天数,因为跨年的原因计算有误. 当时测试组的小姐姐也没有模拟出来这种场景,导致上生产环境直接影响线上的数据. 今天逛技术论论 ...
- Java中日期格式化SimpleDateFormat类包含时区的处理方法
1.前言 需要把格式为“2017-02-23T08:04:02+01:00”转化成”23-02-2017-T15:04:02“格式(中国时区为+08:00所以是15点),通过网上查找答案,发现没有我需 ...
- easyui中日期格式化
<body> <div id="list"></div> <script type="text/javascrip ...
- 关于SQL Server 中日期格式化若干问题
select CONVERT(varchar, getdate(), 120 )2004-09-12 11:06:08 select replace(replace(replace(CONVERT(v ...
随机推荐
- 正则转nfa:bug出现。
本人写的一个正则到nfa的bug 刚写完前面的那篇,自己用脑子过了一下,发现了一个bug.具体情况如下. 这个bug的产生条件是多次调用假名的时候,每次调用都会修改假名的nfa图.直接这么说不好理解, ...
- 转:关于视频H264编解码的应用实现
转:http://blog.csdn.net/scalerzhangjie/article/details/8273410 项目要用到视频编解码,最近半个月都在搞,说实话真是走了很多弯路,浪费了很多时 ...
- /var/spool/postfix/maildrop小文件太多造成inode索引使用完解决
/var/spool/postfix/maildrop 小文件太多造成inode索引使用完解决办法 问题表现和检查: 1.运行df -i / 查看inode使用是否满: 2.查看/var/spool/ ...
- 在Eclipse中导入文件和文件夹
一. 将JAVA文件夹导入Eclipse中的方法: 方法一:直接将java文件夹复制,然后粘贴到项目下: 方法二:(1)打开Eclipse,点击项目的空白处,现在import: (2)现在Existi ...
- Table of Contents - Spring
The IoC container Spring 容器 属性注入 & 构造注入 Bean 实例的创建方式 p-namespace & c-namespace 集合属性的注入 作用域 延 ...
- 在IIS上发布项目后浏览时报的错:Unable to make the session state request to the session state server
错误描述: Unable to make the session state request to the session state server. Please ensure that the A ...
- DWZ (JUI) 教程 DWZ中dialog层的刷新
在DWZ开发过程中经常会遇到的一种情况就是:在navTab页面中通过a标签打开一个dialog,在dialog层进行操作后,需要对该dialog层进行必要的刷新操作. 1.首先讲一下思路: 在非dia ...
- JS中NULL和undifined区别及NULL的作用
1.博客地址:http://www.cnblogs.com/eastday/archive/2010/03/03/1677324.html 2.参考地址2:https://www.zhihu.com/ ...
- php中sprintf与printf函数用法区别
下面是一个示例:四舍五入保留小数点后两位 代码如下 复制代码 <?php$num1 = 21;echo sprintf("%0.2f",$num1)."<b ...
- 常用的CSS缩写语法一些方法小结
使用缩写可以帮助减少你CSS文件的大小,更加容易阅读.css缩写的主要规则如下: 颜色 16进制的色彩值,如果每两位的值相同,可以缩写一半,例如: #000000可以缩写为#000;#336699可以 ...