Обновление MVC 2 просмотра каждые несколько секунд - PullRequest
2 голосов
/ 14 октября 2011

Я использую MVC 2, у меня есть вид, который просто отображает метку с текущим временем на нем.

Я хочу обновлять этот вид (метку) каждые 5 секунд, чтобы время обновлялось. Я использую ниже (взято из здесь ), но, похоже, не работает.

public ActionResult Time()
    {
        var waitHandle = new AutoResetEvent(false);
        ThreadPool.RegisterWaitForSingleObject(
            waitHandle,
            // Method to execute
            (state, timeout) =>
            {
                // TODO: implement the functionality you want to be executed
                // on every 5 seconds here
                // Important Remark: This method runs on a worker thread drawn 
                // from the thread pool which is also used to service requests
                // so make sure that this method returns as fast as possible or
                // you will be jeopardizing worker threads which could be catastrophic 
                // in a web application. Make sure you don't sleep here and if you were
                // to perform some I/O intensive operation make sure you use asynchronous
                // API and IO completion ports for increased scalability
                ViewData["Time"] = "Current time is: " + DateTime.Now.ToLongTimeString();
            },
            // optional state object to pass to the method
            null,
            // Execute the method after 5 seconds
            TimeSpan.FromSeconds(5),
            // Set this to false to execute it repeatedly every 5 seconds
            false
        );

        return View();
    }

Заранее спасибо за помощь!

Ответы [ 3 ]

6 голосов
/ 14 октября 2011

То, что вы делаете, не будет работать, так как после того, как первоначальный ответ будет отправлен клиенту, клиент больше не будет ожидать данные с вашего сервера для этого запроса.Вы хотите, чтобы клиент инициировал новый запрос каждые 5 секунд, а затем просто возвращал данные для каждого запроса.Один из способов сделать это - обновить заголовок.

public ActionResult Time()
{
    this.HttpContext.Response.AddHeader( "refresh", "5; url=" + Url.Action("time") );

    return View();
}
2 голосов
/ 14 октября 2011

Вам необходимо поместить повторяющийся цикл на стороне клиента, чтобы он перезагружал страницу каждые пять секунд.

В одну сторону, используя Javascript:

<script>setTimeout("window.location.reload();",5000);</script>
0 голосов
/ 14 октября 2011

Код, который вы указали, запускается на сервере, и когда клиенту отправляется страница (в данном случае «Просмотреть»), сервер его забывает! Вы должны создать клиентский код для обновления страницы каждые 5 секунд. Вы можете использовать команду header (refresh) или скрипт:

<script>
    setTimeout("window.location.reload();", /* time you want to refresh in milliseconds */ 5000);
</script>

Но если вы просто хотите обновить страницу для обновления Time, я никогда не советую вам обновить страницу полностью. Вместо этого вы можете создать функцию javascript, чтобы отмечать каждые 5 секунд, вычислять текущее время и обновлять метку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...