ASP.NET MVC如何从数据库处理动态日期时间格式

时间:2016-03-24 06:15:52

标签: c# asp.net-mvc datetime

在我的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。我再次拥有一个使用实体框架的基础知识库类。

2 个答案:

答案 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);
    }
}

在视图中我使用相同的日期格式格式化日期的代码。