IE 11 продолжает отображать старое заполненное значение в текстовом поле после того, как значение было пересчитано, и оно должно быть другим.

Кажется, это происходит только с IE. Я использую IE 11 Chrome и Firefox в порядке.

Что происходит: 1. Я открываю страницу сведений об элементе, на которой отображается исходная сумма предмета.

введите здесь описание изображения

  1. Затем я нажимаю кнопку, которая открывает всплывающее окно, в котором мне нужно обновить поле суммы для этого элемента.

    введите здесь описание изображения

    База данных имеет следующие данные перед обновлением:

    введите здесь описание изображения

  2. Я ввожу сумму в текстовое поле и отправляю форму.

введите здесь описание изображения

Сумма вычитается из первоначальной суммы, и данные обновляются новым значением в базе данных.

введите здесь описание изображения

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

Однако при повторном открытии всплывающего окна метод контроллера, который получает новые данные, не срабатывает, и во всплывающем окне по-прежнему отображается старая сумма в размере 414,00 долларов США: введите здесь описание изображения

Кажется, это происходит только в IE.

Chrome и Firefox показывают правильную сумму 314,00 долларов США.

Это код, который открывает всплывающее окно

@Html.ActionLink("Create New Item", "OpenNewItem", "ItemDetail", new
                   {
                       itemId = Model.Item.ItemId
                   }, new { @class = "modal-link k-button k-primary", onclick = "$('#AssignedItem_validationMessage').css('display', 'none');$('#NewAmount_validationMessage').css('display', 'none')" })

При создании новой суммы используется запрос ajax следующим образом:

@using (Ajax.BeginForm("Create", "ItemDetail",
    new AjaxOptions
    {
        HttpMethod = "POST",
        LoadingElementId = "loader",
        UpdateTargetId = "Item",
        InsertionMode = InsertionMode.Replace,
        OnComplete = "handleComplete",
        OnFailure = "CheckError"

    }, new { id = "CreateItemForm" }))
{

    <div class="modal-body">

        <div id="Item">
                @Html.Partial("_CreateNewItem", Model)
            </div>
    </div>
}

Я не уверен, что происходит. Случалось ли что-то подобное с кем-нибудь и как это исправить?


person gene    schedule 22.02.2018    source источник
comment
А как насчет кода?   -  person orhtej2    schedule 22.02.2018
comment
Все работает отлично, что касается логики и кода. Я не думаю, что это проблема кода.   -  person gene    schedule 22.02.2018
comment
Как я должен догадаться, как вы обновляете текстовые поля? Предоставьте MCVE, чтобы я мог воспроизвести вашу проблему.   -  person orhtej2    schedule 22.02.2018
comment
@gene, похоже, ваше модальное (всплывающее окно) не очищается от своих значений после отправки. Итак, вы все еще видите значения во всплывающем окне перед отправкой.   -  person Ryan Wilson    schedule 22.02.2018
comment
@RyanWilson Но это происходит только для IE. Все остальные браузеры в порядке   -  person gene    schedule 22.02.2018
comment
@gene, как выглядит код, который выполняется, когда вы нажимаете кнопку, чтобы открыть всплывающее окно?   -  person Ryan Wilson    schedule 22.02.2018
comment
Я разместил код, когда открывать всплывающее окно   -  person gene    schedule 22.02.2018
comment
Я обнаружил, что при открытии всплывающего окна во второй раз метод контроллера, отвечающий за получение новых значений и обновление модели, не срабатывает, поэтому всплывающее окно показывает старые значения. Но это происходит только в IE   -  person gene    schedule 22.02.2018


Ответы (1)


Мы с помощью моего коллеги, мы, наконец, нашли решение проблемы.

Нам нужно было добавить метод Application_PreSendRequestHeaders в файл Global.asax.cs следующим образом:

protected void Application_PreSendRequestHeaders(Object sender, EventArgs e)
{
    Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache);
}
person gene    schedule 23.02.2018