【问题标题】:an Ajax.ActionLink fired only the first timeAjax.ActionLink 仅在第一次触发
【发布时间】:2011-11-19 10:52:19
【问题描述】:

我的视图中有一个 ActionLink。单击时,我的控制器中的一个动作被触发(我放置了一个断点来检查)。它仅在第一次单击链接时起作用。其他时候,我的动作控制器中的断点永远不会到达。

@Ajax.ActionLink("Remove image", "RemoveImage", new { projectID = Model.ProjectID }, new AjaxOptions { OnSuccess="ImageRemovedSuccess" })   

OnSuccess ajax 事件的“ImageRemovedSuccess”函数被很好地触发,但控制器中的动作没有被触发。

有什么建议吗?

谢谢。

【问题讨论】:

    标签: asp.net-mvc jquery


    【解决方案1】:

    您的浏览器会缓存响应。所以第二次发送请求的时候浏览器不会转发给服务器,因为之前向服务器发送了同样的请求,浏览器会将缓存的响应返回给页面。

    装饰动作方法不缓存其间的响应。

        [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
        public ActionResult RemoveImage(int projectID)
        {
    
        }
    

    检查前请确保在浏览器上按“Ctrl + F5”。

    【讨论】:

    • +1 为我指出我需要的解决方案,但这不适用于部分视图,所以我添加了一个额外的答案。
    【解决方案2】:

    部分视图的附加答案(仅限)

    部分视图不喜欢设置NoStoreDuration 0。

    如果你设置了Duration=0,你会得到Additional information: OutputCacheAttribute for child actions only supports Duration, VaryByCustom, and VaryByParam values. Please do not set CacheProfile, Location, NoStore, SqlDependency, VaryByContentEncoding, or VaryByHeader values for child actions. NoStore 和另一个Duration must be positive 的错误

    部分视图(与普通视图兼容)的修复是:

       [OutputCache(Duration = 1, VaryByParam = "*")]
    

    这最多缓存一秒钟,这对于正常操作应该没问题。

    【讨论】:

      猜你喜欢
      • 2020-10-08
      • 2018-09-27
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多