"UpdatePanel" в бритве (MVC 3) - PullRequest
10 голосов
/ 03 мая 2011

Есть ли что-то вроде UpdatePanel (в ASPX) для Razor?

Я хочу обновлять данные (например, таблицу, диаграмму, ...) автоматически каждые 30 секунд. Аналогично нажатию на следующую ссылку каждые 30 секунд:

 @Ajax.ActionLink("Refresh", "RefreshItems", new AjaxOptions() {
     UpdateTargetId = "ItemList",
     HttpMethod = "Post"})

Edit:

Могу добавить, что ссылка действия предоставляет частичное представление.

Код в cshtml:

<div id="ItemList">
  @Html.Partial("_ItemList", Model)
</div>

Код в контроллере:

    [HttpPost]
    public ActionResult RefreshItems() {
        try {
            // Fill List/Model
            ... 

            // Return Partial
            return PartialView("_ItemList", model);
        }
        catch (Exception ex) {

            return RedirectToAction("Index");
        }
    }

Будет создано, если PartielView сможет обновить себя.

Ответы [ 5 ]

10 голосов
/ 03 мая 2011

Вы можете попробовать что-то похожее на следующее, используя Jquery (пока не проверял)

<script type="text/javascript">
   $(document).ready(function() {
        setInterval(function()
        {
         // not sure what the controller name is
          $.post('<%= Url.Action("Refresh", "RefreshItems") %>', function(data) {
           // Update the ItemList html element
           $('#ItemList').html(data);
          });
        }
        , 30000);
   });
</script>

Приведенный выше код должен быть размещен на содержащей странице, т.е. не на странице частичного просмотра. Имейте в виду, что частичное представление не является полной HTML-страницей.

Мое первоначальное предположение состоит в том, что этот сценарий можно поместить в частичное и изменить следующим образом. Убедитесь, что тип данных ajax установлен на html.

<script type="text/javascript">
    setInterval(function()
    {
      // not sure what the controller name is
      $.post('<%= Url.Action("Refresh", "RefreshItems") %>', function(data) {
        // Update the ItemList html element
        $('#ItemList').html(data);
      });
    }
    , 30000);
</script>

Другой альтернативой является сохранение javascript в отдельном файле js и использование функции Jquery getScript в обратном вызове ajax success.

4 голосов
/ 05 мая 2011

Если кто-то хочет получить полный код для самообновляющегося частичного представления, взгляните!

Код контроллера:

[HttpPost]
public ActionResult RefreshSelfUpdatingPartial() {

            // Setting the Models Content
            // ...

            return PartialView("_SelfUpdatingPartial", model);
}

Код частичного (_SelfUpdatingPartial.cshtml):

@model YourModelClass

<script type="text/javascript">
setInterval(function () {
    $.post('@Url.Action("RefreshSelfUpdatingPartial")', function (data) {
            $('#SelfUpdatingPartialDiv').html(data);
        }
    );
}, 20000);
</script>
// Div
<div id="SelfUpdatingPartialDiv">

// Link to Refresh per Click
<p>
@Ajax.ActionLink("Aktualisieren", "RefreshFlatschels", new AjaxOptions() {
UpdateTargetId = "FlatschelList",
HttpMethod = "Post", InsertionMode = InsertionMode.Replace
})
</p>

// Your Code
// ...

</div>

Код для интеграции Частичного в "Основной" -View (ViewWithSelfupdatingPartial.cs):

 @Html.Partial("_FlatschelOverview", Model)
3 голосов
/ 03 мая 2011

Что ж, если вам не нужен опыт работы с AJAX, используйте тег HTML:

<meta http-equiv=”refresh” content=”30; URL=http://www.programmingfacts.com”>

иди сюда: http://www.programmingfacts.com/auto-refresh-page-after-few-seconds-using-javascript/

2 голосов
/ 30 августа 2011

Тег <meta refresh ..> в HTML будет работать для вас.Это лучший вариант

0 голосов
/ 03 мая 2011

Традиционные элементы управления не работают в ASP MVC

Вы можете сделать это, используя таймеры Jquery http://plugins.jquery.com/project/timers

Другим вариантом может быть использование функции Задержка

В вашей цели так же просто, как обновить всю страницу, эта ссылка SO будет представлять интерес: Автообновление в ASP.NET MVC

Надеюсь, это поможет.

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