簡體   English   中英

帶有jQuery Mobile頁面的MVC 4似乎正在緩存並且未調用控制器方法

[英]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

reloadPageboolean ,默認值: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()); 
   }          
} 

在MVC3中提交數據庫中的數據后如何清除模型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM