Я создаю веб-приложение MVC с интерфейсом cshtml + Angular. Важным аспектом приложения является то, что представление автоматически обновляет угловую таблицу данных при получении новых данных из пользовательской службы данных.
Доступ к службе данных осуществляется через вызов API в классе C # на бэкэнде, который получает свежие данные в виде списка ViewModel <> через заданный интервал (примерно 5 минут), который затем кэшируется. Затем ViewModel List <> передается в представление в качестве параметра ActionResult return View(List<model>)
, сериализуется в нашем контроллере Angular и отображается в таблице с помощью ng-repeat.
Я относительно новичок в MVC, и сейчас единственный способ узнать, как получить данные из контроллера в представление, - это передать их непосредственно в качестве параметра ActionResult. В результате для меня единственный способ получить данные в представлении требует, чтобы я перезагрузил всю страницу с помощью явного действия (HTTPPOST, Forced Refresh, FormSubmit и т. Д.).
Я хочу попробовать использовать Angular и, возможно, AJAX (?) Или аналогичную библиотеку, чтобы «спросить» контроллер, который выполняет вызов API и кэширует данные, если новые данные появляются каждые 10 секунд или около того. Затем, если появятся новые данные (которые когда-то будут ~ 5 минут), они загрузят эти данные в View в фоновом режиме БЕЗ перезагрузки страницы, чтобы Angular мог ее сериализовать, а затем перезагрузить только Таблица.
Это просто для того, чтобы пользователи могли получать самые последние данные, не выполняя явного действия или не обновляя страницу.
Я знаю, как сделать каждую часть этого, кроме как заставить Angular запросить класс C #, который выполняет вызов API, если он совершил новый вызов службы (и сохранил его в ViewModel), а затем «вытянуть» свежие данные из этой ViewModel в представление без необходимости возвращать ActionResult
Edit:
Поскольку именно здесь возникло большинство наших проблем / недоразумений, наша служба данных не находится вне нашего приложения, и, насколько я знаю, к ней нельзя получить доступ посредством ссылки на внутренний URL-адрес. Это «Пакет подключенного сервиса», который мы должны вызывать с помощью функции C #, т.е.
using ServicePackage;
MyDataService = new DataService();
ViewModel.DataList = MyDataService.getData();
Все это происходит в классе контроллера. Я знаю, что это хаккей, а не то, как делается современная архитектура веб-приложений, но это лучшее, что клиент может дать нам для работы. Поверьте, если бы у нас был сервер данных или Web-API, мы могли бы запросить, мы бы использовали $ http, Ajax или любой из дюжины других способов, которыми View может извлекать данные из внешнего источника.