2011-09-14 81 views
1

我是新來web開發和工作在我的第一個ASP.NET MVC 3應用程序。我使用jqGrid,並注意到刷新頁面不會刷新下拉列表中的值,直到我打開另一個選項卡中的同一頁面,然後刷新第一個選項卡將選取更改後的值。jqGrid dataUrl下拉列表不刷新

我有一個控制器的動作,看起來像這樣:

public JsonResult FavoriteToppings() 
{ 
    var all = GetFavoriteToppings(); 
    return Json(all, JsonRequestBehavior.AllowGet); 
} 

,我已經在jqGrid的定義的部分看起來像這樣:

{ name: 'ToppingID', index: 'ToppingID', width: 200, 
    editable: true, align: 'left', edittype: 'select', stype: 'select', 
    editoptions: { 
     dataUrl: '@Url.Action("FavoriteToppings", "Dessert")', 
     buildSelect: createSelectList 
    }, 
    searchoptions: { 
     dataUrl: '@Url.Action("FavoriteToppings", "Dessert")', 
     buildSelect: createSelectList, 
     sopt: ['eq'] 
    } 
}, 

createSelectList看起來是這樣的:

createSelectList = function (data) { 
    var response, s = '<select>', i, l, ri; 
    if (typeof (data) === "string") { 
     //var leng = data.length - 1; 
     response = jQuery.parseJSON(data); 
    } 
    else { 
     response = jQuery.parseJSON(data.responseText); 
     s += '<option value="">Select...</option>'; 
    } 

    if (response && response.length) { 
     for (i = 0, l = response.length; i < l; i += 1) { 
      ri = response[i]; 
      s += '<option value="' + ri + '">' + ri + '</option>'; 
     } 
    } 
    return s + '</select>'; 
} 

我在編輯其中一個頂部名稱時注意到了這一點。我將拼寫錯誤的「Hot Fugde」更改爲「Hot Fudge」並將其保存。當我刷新頁面但過濾器下拉不顯示時,表格中的底層數據得到更新以顯示拼寫正確的頂部(即,所有行正確反映了更改)。在第一次接受變更後,這個行爲根本不會被調用。

當我在瀏覽器的不同頁面中打開同一頁面時,該操作被調用。之後,刷新第一個選項卡將導致正確拼寫的條目顯示在選擇列表中。

也許我只是在錯誤地解決這個問題。任何指導?

回答

4

我認爲你必須使用

ajaxSelectOptions: { cache: false } 

jqGrid parameter設置附加參數cache: false爲使用的jqGrid如果從dataUrl服務器獲取數據的jQuery.ajax

+0

@itsmatt:不客氣!這是一個來自問題的解決方案非常簡單,但人們可以花費很多時間。 :-) – Oleg

1

我注意到緩存策略因瀏覽器而異(Chrome瀏覽器似乎擁有最積極的緩存策略)。這種行爲在所有瀏覽器中都會重複嗎? Ctrl-F5的工作?

+0

似乎只是IE瀏覽器。 – itsmatt