2012-02-15 21 views
0

選擇在我的行動在我的模型編輯一個項目,我有:ASP.NET MVC - 當前選擇的值犯規獲得IE

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

更新

編輯:

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); 
      } 
     } 

EditItem行動POST請求:

[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

也許你有一些JavaScript錯誤或什麼?你能顯示一些代碼嗎? – 2012-02-15 10:54:12

+0

我字面上有一個Ajax表單和一個Ajax鏈接來顯示錶格 – CallumVass 2012-02-15 10:56:07

+0

本來很高興看到你的模型,控制器和視圖的縮小版本,這將允許我們重現該問題。 – 2012-02-15 10:57:26

回答

0

我已經固定它,我改名爲我的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喜歡緩存失敗。我之前讀取請求POST請求防止緩存。