[英]MVC 4 with jQuery Mobile page seems to be caching and controller method not being called
編輯找出來.. $ .ajaxSetup({cache:false}); 因為我在表單上將數據ajax設置為關閉而無法工作,因此無法在其上設置任何緩存ajax。.只是為了完整性,如果有人知道如何設置dada-ajax為假,然后發布,所以在這里
別的東西,我只是想和它的工作是簡單的數據AJAX =“假”添加到你想在一個頁面刷新任何鏈接。 這意味着,如果鏈接上有data-ajax =“ false”,它將始終在顯示頁面之前刷新頁面!
例如,我遇到問題的鏈接是
<a href="@Url.Action("CreateStatusReport", "ProjectHome")">Add a new weekly update</a>
問題是由於某種原因該頁面正在緩存並始終顯示該緩存的頁面。因此,一個簡單的修復方法是向其添加data-ajax =“ false”並每次都強制重新加載該頁面
<a href="@Url.Action("CreateStatusReport", "ProjectHome")" data-ajax="false">Add a new weekly update</a>
`````````````````````````````````````````````````` `````````````````````````````````````````````````` `````````````````````````````````````````````````` `````````````````````````````````````````````````` `````````````````````````````````````````````````` ````````````
問題:我有一個選項菜單,其中顯示了一個表單,該表單也具有“取消並提交”按鈕。
提交表單后,將運行某些驗證,如果缺少某些內容,它將返回帶有一些驗證文本的表單。
現在,如果我隨時單擊“取消”按鈕,則應返回到選項菜單,如果我單擊出現該表單的相同按鈕,則應該看到一個全新的干凈表單,並且如果在驗證之前執行此操作也可以。
問題是,如果我提交了一個無效的表單並返回了錯誤驗證消息, 然后按“取消”,則該頁面似乎已被緩存或類似,因為從那時起,無論何時我單擊表單選項菜單按鈕,都會顯示相同的表單驗證錯誤和數據。 我在返回表單View()的方法中設置了一個斷點,但它們從未被命中,因此由於某種原因,它會跳過整個方法,后者會創建一個新表單,並以某種方式僅顯示舊頁面。
取消按鈕如下
<a href="@Url.Action("ProjectOptions", "ProjectHome", new { id = @Session["projectID"], remove = "true" })" style="text-align:center" data-role="button" data-theme="e" data-icon="arrow-l">Cancel</a>
有人知道發生了什么嗎? 當返回帶有驗證錯誤的同一頁面時,它是否以某種方式被緩存?
**編輯**
我試圖在控制器前面添加[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
,但無濟於事。
我現在也加了
$.ajaxSetup({ cache: false });
到我的$(document).ready(function()的頂部,但這似乎也沒有做任何事情,我只是把它放在那兒還是必須以某種方式調用它?
我檢查了System.Web.HttpContext.Current.Cache,頁面沒有顯示在那里。
您是否嘗試在控制器操作上設置輸出緩存選項,例如
[OutputCache(Duration=600,VaryByParam="id")]
您可能還想嘗試確保jquery也不將請求緩存。 您可以使用以下信息全局關閉jquery ajax緩存: 如何設置緩存:jQuery.get調用中為false
您可以嘗試使用$.mobile.changePage()
過渡到頁面,它允許您設置一些選項,其中之一是reloadPage
。
reloadPage ( boolean ,默認值:false)強制重新加載頁面,即使該頁面已經在頁面容器的DOM中也是如此。 僅當changePage()的'to'參數為URL時使用。
來源: http : //jquerymobile.com/demos/1.1.1/docs/api/methods.html
您可以使用以下方法將其放入鏈接中:
<script>
function changeMyPage(url) {
$.mobile.changePage(url, { reloadPage : true });
}
</script>
<a href="#" onclick="changeMyPage('@Url.Action("ProjectOptions", "ProjectHome", new { id = @Session["projectID"], remove = "true" }))'" style="text-align:center" data-role="button" data-theme="e" data-icon="arrow-l">Cancel</a>
jquery Mobile一次將多個偽頁面提取到DOM中,並且通常在離開它之后刪除( .removes()
)偽頁面。 但是,這聽起來似乎沒有發生,因此您可能需要使用我上面的代碼(或類似方法)來強制刷新頁面。
您需要先清除ModelState。
這應該工作:
if (ModelState.IsValid)
{
//saving
if (result > 0)
{
**ModelState.Clear();**
return View(new CategoryViewModel());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.