-1

编辑 想通了.. $.ajaxSetup({ cache: false }); 没有工作,因为我在表单上将 data-ajax 设置为关闭,因此我无法在其上设置无缓存 ajax。如果有人知道如何完成此操作,则只是为了完整性而设置了 dada-ajax为假,请在此处发布

我刚刚 尝试过并且有效的其他方法是简单地将 data-ajax="false" 添加到您想要刷新页面的任何链接。这意味着如果我在链接上有 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 并且页面没有显示在那里。

4

3 回答 3

1

您是否尝试过在控制器操作上设置输出缓存选项,例如

[OutputCache(Duration=600,VaryByParam="id")]

您可能还想尝试确保 jquery 也没有缓存请求。您可以使用此处的信息全局关闭 jquery ajax 缓存:How to set cache: false in jQuery.get call

于 2012-09-17T16:17:51.200 回答
1

您可以尝试使用$.mobile.changePage()切换到页面,它允许您设置一些选项,其中之一是reloadPage.

reloadPage ( boolean , default: 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()在您离开伪页面后删除 ( ) 一个伪页面。然而,这听起来好像没有发生,所以您可能需要使用我上面的代码(或类似的代码)来强制刷新页面。

于 2012-09-17T16:56:52.083 回答
0

您需要事先清除您的 ModelState。

这应该有效:

if (ModelState.IsValid) 
{ 
   //saving
   if (result > 0) 
   {
      **ModelState.Clear();**
      return View(new CategoryViewModel()); 
   }          
} 

如何在MVC3中提交数据库中的数据后清除模型

于 2018-05-23T14:39:35.637 回答