JoshWigley Ответов: 3

Как вызвать метод контроллера MVC с помощью таймера


Всем привет!

В настоящее время я изучаю MVC и хотел бы получить некоторую помощь в получении части моего проекта для работы. В настоящее время я пишу систему приборной панели, которая проверяет количество файлов в нескольких папках и возвращает значение. Я хотел бы повторно запустить код, который делает это (в контроллере) каждые X секунд/минут и т. д.

Я не хочу, чтобы веб-страница обновлялась, я просто хочу запустить метод, чтобы номера на веб-странице обновлялись правильно.

Поскольку я использую MVC, я, к сожалению, не использую эту систему.Окна.Формы.Функциональность таймера, которая была бы идеально подходит для этого.

Вот код для моего контроллера:

 public ActionResult Documentation()
        {


            try
            {
                #region clinic
                System.IO.DirectoryInfo letters= new System.IO.DirectoryInfo(@"\\TEST\TEST\TEST\TEST\TEST");

                var file = letters.GetFiles().Length;

                ViewBag.letterCount = file.ToString();

                return View();
            }
            catch(exception)
            {
             throw;
            }
}

                #endregion


Что я уже пробовал:

Я пытался сделать это в C# и Ajax/jQuery, но я не уверен, что 1) то, чего я пытаюсь достичь, вообще возможно, 2) Какой метод будет считаться лучшей практикой в отрасли. Любое направление было бы действительно полезно.

F-ES Sitecore

Вам нужно будет сделать это с ajax. Имейте некоторый код в файле js, который находится на каждой странице, использующей window.setInterval для вызова функции js в выбранном вами интервале. В функции, которую вы вызываете, сделайте вызов ajax контроллеру, и контроллер может либо вернуть необработанное число, а затем обновить соответствующий элемент на странице, чтобы показать этот новый номер, либо аналогично он может вернуть представление, чтобы вы получили html-сегмент обратно, и вы можете обновить соответствующую часть экрана с помощью этого html. Если данные, возвращающиеся от контроллера, сложны, то представление может быть проще, если это просто простое число, то пусть оно возвращает только это число.

JoshWigley

В настоящее время я использую очень простой кусок JS, который в данный момент просто обновляет веб-страницу (что ужасно). Я взглянул на выполнение вызова Ajax, но мне нужно будет сделать немного больше чтения, чтобы полностью понять, как реализовать вызов Ajax. Я вижу много общего с GET/POST и т. д. Поскольку я не пытаюсь вставить какие-либо данные, я предполагаю, что хочу использовать метод GET, а не POST?

3 Ответов

Рейтинг:
11

JoshWigley

Всем Привет,

Спасибо за вашу помощь!

Я решил, что более простой способ (или способ, который работал лучше для меня) - это создать частичные представления в MVC, а затем создать сценарий для обновления этих частичных представлений.

Ценю все советы.

Спасибо,
Подшучивать


Рейтинг:
1

Ehsan Sajjad

Вы можете сделать это с помощью jquery и ajax, просто сделайте поиск в google о том, как периодически выполнять вызов ajax.

Существуют методы, доступные в jquery, такие как setTimeout и setInterval, которые можно использовать, например, для вызова действия контроллера через x минут. а затем обновите содержимое страницы.

Например смотрите следующий пост:

Как отправить ajax-запрос через определенный промежуток времени.[^]


Рейтинг:
1

MadMyche

Я бы следовал маршруту AJAX, как вы уже пробовали, создавая новое действие контроллера и устанавливая AJAX для запуска таймера на стороне клиента.

private string _FolderPath = Server.MapPath("your filepath here");
private System.IO.SearchOption _SrcOpt = System.IO.SearchOption.TopDirectoryOnly;

public JsonResult GetFileCountJSON() {
	int filecount = Directory.GetFiles(_FolderPath, "*", _SrcOpt).Length;
	object ReturnData = new { "FileCount", filecount };
	return Json(ReturnData, JsonRequestBehavior.AllowGet);
 }