昨天在做一个功能,要在界面上按照规定的格式显示一个时间,如果直接在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 视图格式化的更多相关文章

  1. mysql之视图

    视图      视图是虚拟的表.与包含数据的表不一样,视图只包含使用时动态检索数据的查询. 理解视图最好的办法就是来看一下例子: SELECT cust_name , cust_contact FRO ...

  2. [框架模式]经典的模型视图控制器模式MVC

    参考:<设计模式> http://blog.csdn.net/u010168160/article/details/43150049 百度百科 引言: Model(模型)是应用程序中用于处 ...

  3. iOS开发学习笔记

    1 常用的第三方工具 1.1 iPhone Simulator 测试程序需要模拟器iPhone Simulator 1.2 设计界面需要Interface Builder,Interface Buil ...

  4. MVC框架

    MVC (Modal View Controler)本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用 ...

  5. 小谈MVC 模式

    MVC (Modal View Controler) 本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使 ...

  6. Android 四大组件 与 MVC 架构模式

    作为一个刚从JAVA转过来的Android程序员总会思考android MVC是什么样的? 首先,我们必须得说Android追寻着MVC架构,那就得先说一下MVC是个啥东西! 总体而来说MVC不能说是 ...

  7. 设计模式-14 MVC模式

    一 MVC设计模式 MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式,它是一个存在于服务器 表达层的模型,它将应用分开,改变应用之间的高度耦合 MVC设计模式将 ...

  8. MVC、ORM、CURD、ActiveRecord、单一入口的概念

    MVC MVC是一个设计模式,它强制性的使应用程序的输入.处理和输出分开.使用MVC应用程序被分成三个核心部件:模型(M).视图(V).控制器(C),它们各自处理自己的任务. 视图 :视图是用户看到并 ...

  9. MVC的处理过程

    MVC的处理过程,首先控制器接受用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户.

随机推荐

  1. RedHat6安装git

    通过yum安装git : 一. 先配置yum: 把redhat系统镜像加载到电脑光驱中(无光驱可用u盘),然后把该镜像配置到环境变量中 文件名不限 在此新建的RHEL_6文件中添加如下内容 其中bas ...

  2. Swift3.0 UICollectionView简单使用

    感觉swift各版本语法改动太大,储备着吧

  3. Luogu2114 [NOI2014]起床困难综合症 【位运算】

    题目分析: 按位处理即可 代码: #include<bits/stdc++.h> using namespace std; ; int n,m; int a[maxn],b[maxn]; ...

  4. 167. Two Sum II - Input array is sorted两数之和

    1. 原始题目 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2. 说明 ...

  5. Atcoder CF 2017 TR I

    Atcoder CF 2017 TR I 给定一个有n个点,m条边的图,求为每条边定向,使得从1出发和2出发的两个人可以见面的方案数. 先把问题转换成求all-不能见面的方案数.那么可以把图划分成这样 ...

  6. loj#6485. LJJ 学二项式定理(单位根反演)

    题面 传送门 题解 首先你要知道一个叫做单位根反演的东西 \[{1\over k}\sum_{i=0}^{k-1}\omega^{in}_k=[k|n]\] 直接用等比数列求和就可以证明了 而且在模\ ...

  7. Cardinality (基数)

    名词 Cardinality:    优化器在计算成本的时候,需要从统计信息中取得数据,然后去估计每一步操作所涉及的行数,叫做Cardinality.    比如,一张表T有1000行数据,列COL1 ...

  8. EOS 修改文件名称与文件夹名称

    最近有一个需求,需要修改EOS名称,将所有文件里面的EOS改为UOS,文件夹名称也需要修改,然后重新构建项目,于是写了一个小程序进行修改.如果有相同项目类似的修改,可以在下面这个程序稍做修改就可以了. ...

  9. anglarJs分页

    首先在页面引入分页插件 <script src="../plugins/angularjs/pagination.js"></script> <lin ...

  10. bootstrap-table 选择行,并且获得选中行的所有数据内容

    html代码如下: <table id="table" data-toggle="table" th:attr="data-url=@{/vie ...