问题描述
用MVC4创建了一个网站目标框架:.NETFramework4.0数据库:SQLite用的是“ADO.NET实体数据模型”的方式连接数据库的。生成的实体类publicpartialclassQueryInfo{[Key]publiclongQueryId{get;set;}[Display(Name="店名")][Required(ErrorMessage="必填")]publiclongShopCode{get;set;}[Display(Name="系统")][Required(ErrorMessage="必填")]publiclongSysTypeId{get;set;}[Display(Name="联系人")][Required(ErrorMessage="必填")]publicstringLinkman{get;set;}[Display(Name="反馈问题")][Required(ErrorMessage="必填")]publicstringQueryDetail{get;set;}[Display(Name="反馈时间")][Required(ErrorMessage="必填")]publiclongQueryTime{get;set;}}
QueryTime字段为long类型,本意是接收到“yyyy-MM-dd”格式的日期后转换成long类型。但在页面中无法输入日期格式。一直提示必须为数字,如何解决页面验证类型的问题呢?网页代码<divclass="row"><divclass="editor-label">@Html.LabelFor(model=>model.ShopCode)</div><divclass="editor-field">@Html.DropDownList("ShopCode",String.Empty)@Html.ValidationMessageFor(model=>model.ShopCode)</div><divclass="editor-label">@Html.LabelFor(model=>model.SysTypeId)</div><divclass="editor-field">@Html.DropDownList("SysTypeId",String.Empty)@Html.ValidationMessageFor(model=>model.SysTypeId)</div></div><divclass="row"><divclass="editor-label">@Html.LabelFor(model=>model.Linkman)</div><divclass="editor-field">@Html.EditorFor(model=>model.Linkman)@Html.ValidationMessageFor(model=>model.Linkman)</div><divclass="editor-label">@Html.LabelFor(model=>model.QueryTime)</div><divclass="editor-field">@Html.EditorFor(model=>model.QueryTime)})@Html.ValidationMessageFor(model=>model.QueryTime)</div></div><divclass="row"><divclass="editor-label">@Html.LabelFor(model=>model.QueryDetail)</div></div><divclass="row"><divclass="editor-text">@Html.TextAreaFor(model=>model.QueryDetail)})@Html.ValidationMessageFor(model=>model.QueryDetail)</div></div>
解决方案
解决方案二:
实体类声明为日期类型,long在后台业务层去转换
解决方案三:
反馈时间是long类型的、你输入的明显是个字符串么、
解决方案四:
为何你非要这么做,难道SqlLite不支持DateTime数据类型?Mark一下,目前我所知道的Asp.NetMVC框架还没有Converter之类的Attribute
解决方案五:
用时间空间多好,直接就是DateTime类型
解决方案六:
引用2楼u010811342的回复:
反馈时间是long类型的、你输入的明显是个字符串么、
+1
解决方案七:
我推荐用字符串~因为如果你用Datatime的话~IE会提示格式错误的,因为IE是用js看能不能转成Date的[Display(Name="反馈时间")][Required(ErrorMessage="必填")]publicstringQueryTime{get;set;}publiclongQueryTimeLong{get{returnQueryTime.tolong}伪代码自己改良一下
解决方案八:
反馈时间直接使用INPUT控件,跳过验证,在自己手动添加时间验证$(function(){$("#QueryTime").rules("add",{date:true})});但这样做只是跳过了前台验证,后台除非你自己new实体对象赋值在转换时间为long,否则让MVC赋值一样会报错,还是统一类型吧
解决方案:
你那个是时间类型。
解决方案:
引用6楼moonwrite的回复:
我推荐用字符串~因为如果你用Datatime的话~IE会提示格式错误的,因为IE是用js看能不能转成Date的[Display(Name="反馈时间")][Required(ErrorMessage="必填")]publicstringQueryTime{get;set;}publiclongQueryTimeLong{get{returnQueryTime.tolong}伪代码自己改良一下
这个方法不行,使用的是EF,字段QueryTimeLong在数据库表中不存在,运行会报错。
解决方案:
引用3楼lincolnandlinda的回复:
为何你非要这么做,难道SqlLite不支持DateTime数据类型?Mark一下,目前我所知道的Asp.NetMVC框架还没有Converter之类的Attribute
数据量大的时候,使用long类型的检索时间会比DateTime类型快。而且很多系统的时间都是用Unix时间戳来记录。