Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: ASP.NET Core
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
yurickas
54 / 45 / 16
Регистрация: 25.11.2015
Сообщений: 457
Завершенные тесты: 1
1

ASP.NET Core: разный формат даты контроллера ASP.NET и AngularJS

14.06.2017, 09:51. Просмотров 1299. Ответов 7
Метки нет (Все метки)

Собственно, проблему пока еще не разруливал, но уже погуглил. Разный формат даты который использует ASP.NET и AngularJS не позволяет на прямую передавать данные типа DateTime в WebApi. Возникает ошибка парсинга. Где-то в msdn попадался пример, но в закладки сразу не положил и потерял.

Итак, пока проблема такая:
Как сделать парсинг даты в AngularJS из формата "yyyy-MM-dd"? Метод Parse() в ангуляре выдает ошибку.

Проблема еще не настолько актуальная, шоб за горло брало, но через пару-тройку дней столкнусь. Я так думаю, что есть решение в пару строк (как обычно), чтобы не городить костыли.

Добавлено через 7 минут
HTML5
1
2
3
<div class="panel-body">
                <input type="date" class="form-control form-mincontrol" ng-model="{{currentData | date:'yyyy-MM-dd'}}"/>
            </div>
Вот, какбы AngularJs отдает в модель формат даты "yyyy-MM-dd". Контроллер MVC отдает строку в таком же формате. AngularJS эту строку есть не хочет. Может проблема в том, что передаю строку?

C#
1
2
[HttpGet("GetCurrentData")]
        public CurrentData GetCurrentData() => new CurrentData() { Data = DateTime.Now.ToString("yyyy-MM-dd")};
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2017, 09:51
Ответы с готовыми решениями:

Разница между ASP.NET Core 2, ASP.NET Core MVC, ASP.NET MVC 5 и ASP.NET WEBAPI 2
Здравствуйте. Я в бекенд разработке полный ноль. В чем разница между вышеперечисленными...

ASP.NET Core. Старт - что нужно знать, чтобы стать ASP.NET Core разработчиком?
Попалось хор краткое обзорное видео 2016 года с таким названием - Что нужно знать, чтобы стать...

Какая разница между ASP .Net Core и ASP .Net Core MVC?
Какая разница между ASP .Net Core и ASP .Net Core MVC? Или я может что-то не так понял? И...

ASP.NET Core + AngularJs. Не работает метод success сервиса $http
Собственно, вот. Разбираюсь с работой Angular. Вроде все работает, но стала проблема с работой...

ASP.NET MVC или ASP.NET Core
Добрый вечер, подскажите что лучшие изучать ASP.NET MVC или ASP.NET Core ? Как я понимаю ASP.NET...

7
_exp10der_
Warrior
490 / 417 / 177
Регистрация: 23.11.2014
Сообщений: 932
14.06.2017, 11:24 2
Просто надо настроить свой серелизатор для даты что бы он конвертировал в нужный формат для AngularJS, например если у вас JSON.NET в нем есть JsonSerializerSettings класс. http://www.newtonsoft.com/json/help/...FormatHandling
0
sau
2059 / 1646 / 278
Регистрация: 22.07.2011
Сообщений: 6,276
Завершенные тесты: 1
15.06.2017, 00:02 3
а currentData на клиенте в каком формате ? , апи то у Вас возвращает сериализованный обьект , который к дате отношения не имеет.
Цитата Сообщение от _exp10der_ Посмотреть сообщение
Просто надо настроить свой серелизатор для даты что бы он конвертировал в нужный формат для AngularJS
апи не должно никак зависеть от клиента , а если в другой раз клиентом будет не angular ? , другую версию метода делать ?
0
yurickas
54 / 45 / 16
Регистрация: 25.11.2015
Сообщений: 457
Завершенные тесты: 1
15.06.2017, 11:22  [ТС] 4
Так, пришлось немного изменить тут все.

WebApi контроллер такой:
C#
1
2
[HttpGet("GetCurrentData")]
        public CurrentData GetCurrentData() => new CurrentData() { Data = DateTime.Now.ToUniversalTime()};
В контроллере Angular получаем эту дату вот так:
Javascript
1
2
3
4
factory.getCurrentData().then(function (currentData) {
                $scope.currentData = currentData.data;
                
            });

Ну, и еесно в странице ставим сие действо
HTML5
1
2
3
<div class="panel-body">
                <input type="date" class="form-control form-mincontrol" ng-model="currentData.data"/>
            </div>
WebApi контроллер отдает мне дату в таком вот формате:
PM> invoke-restmethod [url]http://localhost:1826/api/WorkingPlacesRecords/GetCurrentData -method GET

data
----
2017-06-15T08:13:38.0992833Z


по идее Angular должен сожрать эту дату автоматом, если я ничего не путаю. Но даже если я в скрипте не определю модель currentData, а просто в html оставлю ng-model='curentData', то по идее Angular должен в $scope сам создать модель и держать там данные в нужном формате, но он выдает ошибку парсинга. Пойду в документацию ангуляра рыться.
1
_exp10der_
Warrior
490 / 417 / 177
Регистрация: 23.11.2014
Сообщений: 932
15.06.2017, 11:36 5
sau, В json вообще нету типа даты это не входит в стандарт, это выбор фреймворка/javascript'а по какому стандарту он будет интерпретировать дату.

http://json.org/
http://www.ecma-international.org/pu...T/ECMA-404.pdf
0
yurickas
54 / 45 / 16
Регистрация: 25.11.2015
Сообщений: 457
Завершенные тесты: 1
15.06.2017, 11:51  [ТС] 6
Порылся в документации к ангуляру. В общем, ничего и никому он не должен. ng-model привязывается к данным Date().

Пока получилась вот такая конструкция:
Контроллер
C#
1
2
[HttpGet("GetCurrentData")]
        public CurrentData GetCurrentData() => new CurrentData();
модель даты контроллера
C#
1
2
3
4
5
6
7
8
9
10
11
12
public class CurrentData
    {
        public int Year { get { return currentData.Year; } }
        public int Month { get { return currentData.Month; } }
        public int Day { get { return currentData.Day; } }
 
        private DateTime currentData;
        public CurrentData()
        {
            currentData = DateTime.Now;
        }
    }
Ангуляр
Javascript
1
2
3
4
5
factory.getCurrentData().then(function (currentData) {
                var currentData = currentData.data;
                $scope.currentData = new Date(currentData.year, currentData.month, currentData.day);
                
            });
и html
HTML5
1
2
3
<div class="panel-body">
                <input type="date" class="form-control form-mincontrol" ng-model="currentData"/>
            </div>
Ну, как-то так. Ну, думаю, что проблем с обратным парсингом не возникнет
0
sau
2059 / 1646 / 278
Регистрация: 22.07.2011
Сообщений: 6,276
Завершенные тесты: 1
15.06.2017, 12:29 7
Цитата Сообщение от _exp10der_ Посмотреть сообщение
В json вообще нету типа даты это не входит в стандарт, это выбор фреймворка/javascript'а по какому стандарту он будет интерпретировать дату.
Я о другом , апи выдает данные в том виде , как ему нужно , не подстраиваясь под клиента , понятно , что на уровне json это всего лишь строка.
Цитата Сообщение от yurickas Посмотреть сообщение
привязывается к данным Date().
ну да , а Date в свою очередь легко парсит строку DateTime формата , по этому лишние поля в модели ни к чему.
0
yurickas
54 / 45 / 16
Регистрация: 25.11.2015
Сообщений: 457
Завершенные тесты: 1
15.06.2017, 13:01  [ТС] 8
Ну да. Что-то я тупанул. Видать когда первый раз пробовал, где-то ошибся, не получилось и понеслась езда по кочкам с чтением ангуляра.
0
15.06.2017, 13:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2017, 13:01

Подойдет ли .NET Core 1.0 (RC2) для разработки cоциальной сети на ASP.NET?
Добрый день. У меня есть идея одна по написаю одной социальной сети. Как вы думаете подойдет...

ASP.NET .NET Core Web Api -- почему параметры всегда null?
Что я делаю не так? using Microsoft.AspNetCore.Mvc; namespace WebApiServer.Controllers { ...

ASP.NET Core и .NET библиотеки
Пишу веб API на ASP.NET Core, необходимо генерировать отчет в pdf по получаемым данным, с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru