【问题标题】:Model not updating after Ajax call to delete dataAjax 调用删除数据后模型未更新
【发布时间】:2012-07-26 06:04:49
【问题描述】:

我正在组装一个小型 POC 网络应用程序,其中一个页面称为“ViewAds”(您可以想象它的作用)。无论如何,对于网站管理员来说,每个广告都有一个删除按钮,该按钮调用一个控制器操作 DeleteAd 的 ajax 调用,该操作只需点击 DAL 即可删除该项目并返回。没有重定向,没有刷新,什么都没有。

Ajax 回调是我负责刷新的地方:

success: function(){
url = '@Url.Action("ViewAds","Ad",new{OtherOptionsForDisplayingAdsGo=here})';
window.location.href = url;
}

哪个广告再次访问数据库,并且应该返回我的视图而没有删除的广告。

但是,在我手动刷新之前,该页面仍会显示广告。我还注意到,如果我在 ViewAds 上设置断点,让它有时间更新(我猜),它也可以正常工作。有人知道这里发生了什么吗?

这是我的 ViewAd,如果你想看的话:

public ActionResult ViewAds(string getAllAds = "false")
        {
            bool GetAllAds = bool.Parse(getAllAds);
            List<PostedAD> results;
            if (Session["Location"] == null || GetAllAds)
            {
                DataManager _dataProvider = new DataManager();
                results = _dataProvider.FetchAds();
                ViewData["ViewAllAds"] = "True";
                return View("ViewAds", results);
            }
            else
            {
                string Location = Session["Location"].ToString();
                DataManager _dataProvider = new DataManager();
                results = _dataProvider.FetchAdsByLocation(Location);
                ViewData["ViewAllAds"] = "False";
                return View("ViewAds", results);
            }
        }

删除非常直观。它只是在特定广告上调用我的DataManager.Delete()。 (效果很好)

那么任何人都可以帮助解决这个问题吗?我不确定发生了什么,但我认为这与 ajax 有关。

【问题讨论】:

    标签: c# asp.net ajax asp.net-mvc-3


    【解决方案1】:

    可能是缓存问题。尝试通过附加一个随机查询字符串参数来破坏缓存:

    window.location.href = "@Url.Action("ViewAds", "Ad", new { OtherOptionsForDisplayingAdsGo = here, _ = DateTime.Now.Ticks.ToString() })";
    

    【讨论】:

    • 是的,这也是我最先想到的,并尝试使用 OutputCache 属性每次都强制一个新页面,但没有这样做。刚才也试过了,没成功。
    • 哦,这与您的数据访问代码有关。您是否尝试过调试并确保通过 ViewAds 操作您实际上获得了新数据?
    • 嗯,就是这样。当我在 ViewAds 或 DAL 代码中设置断点时,它工作得很好,并且所有内容都会更新,因此调试它并没有真正给我带来很多好处。以前,我让 Ajax 调用的操作返回一个视图,我想可能是因为它是异步的,所以它在完成渲染之前返回到回调。这是有道理的,但后来我改变了我当前的架构,我遇到了同样的问题。
    • 我唯一能想到的另一件事是,也许我在不知不觉中让连接处于打开状态,然后在 GC 找到它并摆脱它之前它实际上并没有更新。这有意义吗?
    • 我想我可以调用 delete 然后通过 jQuery 或其他方式隐藏元素,然后我什至不需要回发。无论如何,这可能是一种更好的方法。但是,我仍然很想知道这里的根本问题是什么。
    【解决方案2】:

    好吧,事实证明我不小心在这个特定函数的 DAL 代码中打开了连接对象。添加:

    finally
    {
        if(conn!=null) conn.Close();
    }
    

    到我的FetchAds() 方法结束时解决了我的问题。

    如果有人想准确解释为什么会导致所描述的问题,我很乐意接受这个答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-07
      • 2019-03-20
      • 1970-01-01
      • 2018-11-20
      • 2014-01-01
      • 2019-10-29
      • 2017-01-18
      • 1970-01-01
      相关资源
      最近更新 更多