Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NET MVC如何处理数据库中的动态日期时间格式_C#_Asp.net Mvc_Datetime - Fatal编程技术网

C# NET MVC如何处理数据库中的动态日期时间格式

C# NET MVC如何处理数据库中的动态日期时间格式,c#,asp.net-mvc,datetime,C#,Asp.net Mvc,Datetime,在我的ASP.NET MVC 5 dwith EF 6项目中,我有一个数据库,其中日期时间格式存储为类似“dd-MM-yyyy”的字符串。用户可以随时更改此格式。用户将在视图的日期字段中使用给定的格式。但他们什么时候发布。它将自动绑定为该属性的日期时间。我通过下面的代码静态地处理它 [DataType(DataType.Time), DisplayFormat(DataFormatString = "{HH:mm}", ApplyFormatInEditMode = true)] public

在我的ASP.NET MVC 5 dwith EF 6项目中,我有一个数据库,其中日期时间格式存储为类似“dd-MM-yyyy”的字符串。用户可以随时更改此格式。用户将在视图的日期字段中使用给定的格式。但他们什么时候发布。它将自动绑定为该属性的日期时间。我通过下面的代码静态地处理它

[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);
    }
}
但我知道这不是最好的办法。可能需要一个模型绑定器或过滤器或任何类型的自定义属性。如果您能给我一个带有示例代码的有效解决方案,我将得到极大的帮助。提前谢谢


注意:我使用的是razor视图引擎。我的解决方案由7个项目组成。所以在模型中不可能使用会话。我还有一个使用实体框架的基本存储库类。

人们通常将日期时间作为日期时间存储在数据库中。 然后,无论在何处执行从datetime到字符串的转换,datetime的显示格式都取决于查看器的区域性。 通过这样做,您可以快速创建一个带有日期时间格式的页面,无论您身在何处,都可以很好地格式化日期时间

更改传递给toString的区域性,格式将更改

请参阅此了解更多信息

编辑:(见下面的评论) 服务器上的任意位置:

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中访问方法客户端。我希望这有帮助


(老实说,我也是一名新的开发人员,还有很多东西要学。^^)

关于这个问题,我已经尝试了很多选择。现在我要做的是创建一个操作过滤器,以捕获所有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);
    }
}

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

那么为什么不在视图中设置日期格式呢?是的,我在视图中还有最后一个选项。但是我必须修改很多代码,我觉得它不适合我的问题。我想有一个共同的地方,我会处理它。用户如何更改格式?您是否正在存储新格式?有一个表单,人们可以在其中选择日期时间格式。它存储在数据库中。当用户使用其公司信息登录时,格式字符串被提取。这就是我所做的。但实际问题是从数据库中动态选择格式或区域性。我应该在哪里做?在模型中?或在视图或控制器中。我想从一个地方处理所有datetime属性。嗯,基本上,您需要在datetimes上添加一个方法来检查数据库中的区域性,并以正确的格式返回一个datetime字符串。也许一个扩展方法可以是你想要做这个逻辑的地方?所以您可以在任何需要的地方执行
datetime.ToCustomFormat()
?(这是服务器端)假设我必须将日期作为自定义格式发布,则属性将字符串作为默认日期时间格式。我如何解决它?我正在试用modelbinder。更新的答案,希望对您有所帮助。您不需要在视图(javascript)中进行其他日期时间计算,对吗?感谢兄弟的努力,我已经接近解决此问题的方法了。很快我就会解决这个问题。