ASP.NET MVC - текущее выбранное значение не выбирается в IE - PullRequest
0 голосов
/ 15 февраля 2012

В моем действии для редактирования элемента в моей модели у меня есть:

ViewBag.PossibleSource = context.Source.ToList();

На мой взгляд, у меня есть:

@Html.DropDownListFor(model => model.SourceID, ((IEnumerable<btn_intranet.Areas.DayBook.Models.DayBookSource>)ViewBag.PossibleSource).Select(option => new SelectListItem
       {
           Text = (option == null ? "None" : option.SourceName),
           Value = option.SourceID.ToString(),
           Selected = (Model != null) && (option.SourceID == Model.SourceID)
       }))

В Chrome это работает как положено. Когда я передаю модель в мое представление, текущее значение, установленное в моей модели, является выбранным значением в списке. Но в IE8 и 9 выбранное значение - ОРИГИНАЛЬНОЕ значение, которое было задано для моей модели, даже если обновление работает. Так что, если я выбрал «привет» первоначально, а затем отредактировал «мир». В Chrome при перезагрузке страницы будет установлено «мир», но в IE в раскрывающемся списке выбрано «привет», хотя в моей базе данных для моей модели установлен «мир». Стоит отметить, что они обновляются через AJAX

EDIT:

Ajax.ActionLink:

@Ajax.ActionLink(item.ItemNumber, "EditItem", new { id = item.QuoteLineID, enquiryId = item.EnquiryID }, new AjaxOptions()
       {
           InsertionMode = InsertionMode.Replace,
           UpdateTargetId = "EditItem"
       })

Это загружает форму в представление.

Ajax.BeginForm:

@using (Ajax.BeginForm("EditItem", new { controller = "QuoteLines" }, new AjaxOptions()
    {
        InsertionMode = InsertionMode.Replace,
        UpdateTargetId = "Summary"
    }, new { @class = "manual-search cf" }))
{
  ...Other Model inputs

@Html.DropDownListFor(model => model.SourceID, ((IEnumerable<btn_intranet.Areas.DayBook.Models.DayBookSource>)ViewBag.PossibleSource).Select(option => new SelectListItem
       {
           Text = (option == null ? "None" : option.SourceName),
           Value = option.SourceID.ToString(),
           Selected = (Model != null) && (option.SourceID == Model.SourceID)
       }))
      <input type="submit" class="update-items" value="Update Line" />
}

Действие EditItem GET-запрос:

public virtual ActionResult EditItem(int id)
        {
            try
            {
                DayBookQuoteLines q = context.QuoteLines.Single(x => x.QuoteLineID == id);
                ViewBag.PossibleSource = context.Source.ToList();
                if (Request.IsAjaxRequest())
                {
                    return PartialView("_EditItem", q);
                }
                else
                {
                    return RedirectToAction("SalesDetails", new { controller = "Enquiries", id = q.EnquiryID });
                }
            }
            catch (Exception ex)
            {
                return PartialView("_Error", ex.Message);
            }
        }

POST-запрос действия EditItem:

[HttpPost]
        public virtual ActionResult EditItem(DayBookQuoteLines q)
        {
            try
            {

                ViewBag.PossibleSource = context.Source.ToList();

                if (ModelState.IsValid)
                {
                    context.Entry(q).State = EntityState.Modified;
                    context.SaveChanges();

                    return PartialView("_GetSummary", context.Vehicles.Where(x => x.EnquiryID == q.EnquiryID).ToList());
                }
                return PartialView("_EditItem", q);
            }
            catch (Exception ex)
            {
                return PartialView("_Error", ex.Message);
            }
        }

1 Ответ

0 голосов
/ 20 февраля 2012

Я исправил это, я переименовал мой запрос GET для EditItem в EditItemGet, а затем в своем @ Ajax.ActionLink я сделал:

 @Ajax.ActionLink(item.ItemNumber, "EditItemGet", new { id = item.QuoteLineID, enquiryId = item.EnquiryID }, new AjaxOptions()
           {
               InsertionMode = InsertionMode.Replace,
               UpdateTargetId = "EditItem",
               HttpMethod = "POST"
           })

Это была проблема с кешем. Вот почему это не удалось только в IE, который любит Cache. До этого я читал, что выполнение запроса POST предотвращает кеширование.

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