Обновить объект viewData в renderPartial

Мне нужна помощь с этим..

У меня есть данные просмотра со списком клиентов, и я передаю их при вызове метода действия Index.

/* Индексное действие — это метод, открывающий представление. */

После вызова метода Index переменная загружается и отображается представление.

Затем у меня есть диалоговое окно, в котором отображается частичное представление, в котором есть таблица со списком клиентов.

<div id="popupClients" class="popUp" style= "display:none">
    <% Html.RenderPartial("ClientsPartialView", ViewData["clients"]); %>

/* popupClients is the dialog. */

/* ClientsPartialView — это partialView с таблицей, которая показывает идентификатор и имя клиентов. */

Вопрос в том, как я могу обновить данные представления перед отображением?

Я спрашиваю об этом, потому что, если кто-то вставляет новый клиент, он должен отображаться в частичном представлении.

Спасибо!


person Fausto Carasai    schedule 11.04.2012    source источник


Ответы (1)


Вы можете использовать Ajax, чтобы обновить часть страницы, которая представляет popupClients, непосредственно перед отображением этого диалог.

Если ваше частичное представление отображает, скажем, div, содержащий все содержимое всплывающего окна, вы можете использовать Ajax для обновления этого div, что-то вроде:

function getCustomerList(searchCriteria) {
    $.ajax({
        url: 'Home/GetClientList',
        type: 'POST',
        async: false,
        data: { searchString: searchCriteria },
        success: function (result) {
            $("#popupClients").html(result);
            $( /*... do whatever you do now to show your dialog....*/ ;
        }
    });
};

ОБНОВЛЕНИЕ

На основе вашего комментария...

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

Что-то вроде:

[OutputCache(Duration = 0)]
public ActionResult _ClientList()
{
    List<Clients> clientList = GetCurrentClientListsFromDB();

    return PartialView(clientList);
}

Это приведет к проверке базы данных каждый раз, когда вызывается контроллер. Если допустимо пропустить недавнее обновление, вы можете изменить значение OutputCache, чтобы указать механизму MVC кэшировать результат в течение заданного количества секунд. Вы также можете настроить OutputCache для обновления на основе SQL Зависимость, чтобы она автоматически становилась недействительной при изменении базовой таблицы, а не просто обновлялась на основе прошедшего времени. Это сложнее в настройке, но даст более точный результат.

person Eric J.    schedule 11.04.2012
comment
может я не правильно выражаюсь. ‹div id=MainTab› ‹table id=tab1› ‹tr› ‹th› ID ‹/th› ‹th style=width:300px;› NOMBRE ‹/th› ‹/tr› ‹% foreach (элемент var в модели) { %› ‹tr› ‹td id= ‹%: item.ID %›› ‹%: item.ID %› ‹/td› ‹td id= ‹%: item.ID %›› ‹%: item.NOMBRE %› ‹/td› ‹/tr› ‹% } %› ‹/table› ‹/div› Мне нужно обновить вкладку 1 со списком клиентов - person Fausto Carasai; 11.04.2012