如何从前端(Angular)向C#.net datetime(webAPI)发送日期?

时间:2014-10-05 15:04:49

标签: c# asp.net .net json angularjs

在我的前端,我有一个HTML输入框,用户可以在其中输入日期。这会将数据添加到我的AngularJS模式中,然后当用户单击“保存”时,我尝试将其作为JSON对象发送到服务器。

在我使用过的服务器上,我认为会修改日期的预期方式。我所知道的是它允许AngularJS很好地读取来自后端的日期。

     config.SuppressDefaultHostAuthentication();
        config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
        config.Formatters.Remove(config.Formatters.XmlFormatter);
        var json = config.Formatters.JsonFormatter;
        json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
        json.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
        json.SerializerSettings.Converters.Add(new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-ddTHH:mmZ" });

有没有人有任何想法如何以YYYY-MM-DD,modify in some way等格式输入输入框中的日期,然后将其传递给服务器并让服务器将其读取为日期时间?

我遇到的问题是我不知道如何修改YYYY-MM-DD日期。当我尝试输入像#34; 2011-12-31"它不会被服务器接受,并且应该输入的列显示日期的空值。

3 个答案:

答案 0 :(得分:0)

您是否尝试过创建IsoDateTimeConverter的子类?试试这个:

public class MyJsonDateTimeConverter : IsoDateTimeConverter
{
    public MyJsonDateTimeConverter()
    {
        base.DateTimeFormat = "yyyy-MM-dd";
    }
}

然后用它代替最后一行:

json.SerializerSettings.Converters.Add(new MyJsonDateTimeConverter());

希望这会有所帮助:)

答案 1 :(得分:0)

  
    

有没有人有任何想法如何以YYYY-MM-DD等格式输入输入框中的日期,以某种方式修改然后将其传递给服务器并让服务器将其读作日期时间?

  

为什么不使用角色ui团队的date picker component

  
    

我遇到的问题是我不知道如何修改YYYY-MM-DD日期。当我尝试输入像“2011-12-31”这样的日期时,它不会被服务器接受,并且应该输入的列显示该日期的空值。

  

服务器端的YYYY-MM-DD是否为可接受的日期格式?然后,您可以将客户端上的现有日期格式转换为此格式,然后再将其发布到服务器。检查您的网络标签,查看发布的值。

希望这有帮助。

答案 2 :(得分:0)

如果您知道格式,请尝试使用DateTime.ParseExact,如果您不知道,请尝试使用DateTime.Parse:

DateTime dt = DateTime.ParseExact("2011/12/31", "yyyy/d/MM", new CultureInfo("en-US"));


DateTime.Parse("2011/12/31", new CultureInfo("en-US"));

但是,如果来自UI的日期具有以下格式:YYYY-MM-DD,请尝试以下操作:

DateTime dt;
DateTime.TryParseExact(dateTime, 
                       "yyyy-MM-dd hh:mm tt", 
                       CultureInfo.InvariantCulture, 
                       DateTimeStyles.None, 
                       out dt);