MVC - частичное представление продолжает отображать тот же контент - PullRequest
3 голосов
/ 23 ноября 2011

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

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

public PartialViewResult OpenConfig(string SelectID)
{
    using (DBconnection db = new DBconnection())
    {
        switch (SelectID)
        {
            case "---":
                return null;
            case "1":
                var countries = (from x in db.tbl_CountriesSet select x).ToList();
                return PartialView("Countries", countries);
            case "2":
                var supplierstatus = (from x in db.tbl_SupplierStatusSet select x).ToList();
                return PartialView("Supplierstatus", supplierstatus);
            case "3": .....
        }
    }
}

Вот где это становится интересным. Предположим, я открываю окно «Страны», оно загружается правильно, я могу добавить / отредактировать / удалить страну. Эти записи обновляются на странице с использованием jQuery, и одновременно для обновления базы данных используется вызов Ajax. Оба они работают нормально, как база данных обновляется, так и страница. Я могу продолжать работать, и все изменения отражаются как на странице, так и в БД, проблемы начинаются при перезагрузке частичного представления.

Когда я выбираю значение «Страны» в раскрывающемся списке и снова отправляю его, программа просто пропускает метод, показанный выше, и отображает тот же частичный вид, который был показан мне при первом запросе списка. Я устанавливаю точку останова в методе, если я загружаю что-то, что я не загрузил, прежде чем это сработает, но не для страниц, которые я уже запросил. В Firefox это работает, и частичное представление обновляется (и срабатывает точка останова), но в Internet Explorer мой контроллер полностью игнорируется, и он продолжает отображать одну и ту же страницу (даже когда я перехожу на совершенно другую страницу и затем возвращаюсь назад на страницу настроек).

Может кто-нибудь сказать мне, как я могу сказать IE, чтобы явно перезагрузить частичное представление, содержащее текущее содержимое базы данных?

Ответы [ 2 ]

3 голосов
/ 23 ноября 2011

Это кеширование браузера работает.Он возвращает кешированные результаты.

Используйте добавление значения текущей даты в URL, чтобы разрешить загрузку новых результатов с веб-сервера:

$('#container').load("http://mysite/myview/?" + new Date().getTime(), function () { });
0 голосов
/ 23 ноября 2011

Помимо функций вашего контроллера, попробуйте:

[OutputCache(Duration = 0)]
...