在我的ASP.NET MVC 5与EF 6项目中,我有一个数据库,其中datetime格式存储为字符串,如" dd-MM-yyyy"。用户可以随时更改此格式。用户将在视图的日期字段中使用给定的格式。但是当他们发布时。它将自动绑定为该属性的DateTime。我通过以下代码静态处理它
[DataType(DataType.Time), DisplayFormat(DataFormatString = "{HH:mm}", ApplyFormatInEditMode = true)]
public DateTime? EndingTime { get; set; }
public string EndingTimeValue
{
get
{
return EndingTime.HasValue ? EndingTime.Value.ToString("HH:mm") : string.Empty;
}
set
{
EndingTime = DateTime.Parse(value);
}
}
但我知道这不是最好的方法。可能需要模型绑定器或过滤器或任何类型的自定义属性。如果您使用示例代码为我提供有效的解决方案,我将得到很大的帮助。提前谢谢。
注意:我正在使用剃刀视图引擎。我的解决方案包括7个项目。所以没有机会在模型中使用Session。我再次拥有一个使用实体框架的基础知识库类。
答案 0 :(得分:0)
人们通常将日期时间作为日期时间存储在数据库中。 然后,无论您在何处进行从datetime到string的转换,datetime都可以以取决于查看器文化的格式显示。 通过这样做,您可以快速制作一个日期时间格式的页面,无论您身在何处,都可以很好地格式化日期时间。
将传递的文化更改为toString并更改格式。
请参阅此MSDN page了解更多信息。
编辑:(见下面的评论) 服务器上的任何地方:
string WhatYouWant = yourTime.ToCustomFormat()
并为datetime创建一个扩展方法,该方法从数据库中获取格式并返回正确格式的字符串。
public static class MyExtensions
{
public static string ToCustomFormat(this DateTime yourTime)
{
// Get the following var out of the database
String format = "MM/dd/yyyy hh:mm:sszzz";
// Converts the local DateTime to a string
// using the custom format string and display.
String result = yourTime.ToString(format);
return result;
}
}
这将允许您随时随地在服务器上调用它。您无法在javascript中访问方法客户端。我希望这会有所帮助。
(说实话我也是新开发者,还有很多需要学习的东西^^)
答案 1 :(得分:0)
我已经尝试了很多关于这个问题的选择。现在我正在做的是创建一个动作过滤器来捕获所有 DateTime 和可以为空的DateTime 字段。我在这里提供活页夹。
public class DateTimeBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
DateTime date;
var displayFormat = SmartSession.DateTimeFormat;
if (DateTime.TryParseExact(value.AttemptedValue, displayFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
{
return date;
}
else
{
bindingContext.ModelState.AddModelError(bindingContext.ModelName,"Invalid Format");
}
return base.BindModel(controllerContext, bindingContext);
}
}
在视图中我使用相同的日期格式格式化日期的代码。