C# Ajax调用删除数据后模型未更新

C# Ajax调用删除数据后模型未更新,c#,asp.net,ajax,asp.net-mvc-3,C#,Asp.net,Ajax,Asp.net Mvc 3,我有一个小的POC网络应用程序,我正在组装,我的一个页面叫做“ViewAds”(你可以想象它的功能)。无论如何,对于站点管理员来说,每个广告都有一个delete按钮,它调用对控制器操作DeleteAd的ajax调用,DeleteAd只需点击DAL即可删除项目并返回。没有重定向,没有刷新,什么都没有 Ajax回调是我处理刷新的地方: success: function(){ url = '@Url.Action("ViewAds","Ad",new{OtherOptionsForDisplayin

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

Ajax回调是我处理刷新的地方:

success: function(){
url = '@Url.Action("ViewAds","Ad",new{OtherOptionsForDisplayingAdsGo=here})';
window.location.href = url;
}
它再次点击数据库中的广告,并且应该返回我的视图而不删除广告

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

这是我的视频广告,以防你想看:

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);
            }
        }
public ActionResult视图广告(字符串getAllAds=“false”)
{
bool GetAllAds=bool.Parse(GetAllAds);
列出结果;
if(会话[“位置”]==null | | GetAllAds)
{
DataManager_dataProvider=新DataManager();
结果=_dataProvider.FetchAds();
ViewData[“ViewAllAds”]=“真”;
返回视图(“视图广告”,结果);
}
其他的
{
字符串位置=会话[“位置”]。ToString();
DataManager_dataProvider=新DataManager();
结果=_dataProvider.FetchAdsByLocation(位置);
ViewData[“ViewAllAds”]=“False”;
返回视图(“视图广告”,结果);
}
}
删除是非常直观的。它只需在特定广告上调用my
DataManager.Delete()
(工作正常)


有人能帮忙吗?我不确定发生了什么,但我认为这与ajax有关。

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

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

事实证明,我在这个特定函数的DAL代码中意外地打开了连接对象。添加:

finally
{
    if(conn!=null) conn.Close();
}
在我的
FetchAds()方法的末尾,修复了我的问题


如果有人想确切地解释为什么会出现上述问题,我很乐意接受这个答案。

是的,这也是我第一次想到的,我尝试使用OutputCache属性每次强制创建一个新页面,但没有做到。刚才也试过了,但运气不好。哦,那这和你的数据访问代码有关。您是否尝试过调试,并确保通过ViewAds操作您实际上获得了新的数据?这就是问题所在。当我在ViewAds或DAL代码中设置断点时,它工作得很好,所有内容都会更新,所以调试它对我并没有多大好处。以前,我让Ajax调用的操作返回一个视图,我想可能因为它是异步的,所以它在完成渲染之前返回回调。这是有道理的,但后来我改变了我当前的架构,我也遇到了同样的问题。我能想到的唯一一件事是,我可能会在没有意识到的情况下让连接保持打开状态,然后在GC找到并摆脱它之前,它实际上不会被更新。这有意义吗?我想我可以调用delete,然后通过jQuery或其他方式隐藏元素,这样我就不需要回发了。无论如何,这可能是一个更好的方法。不过,我还是想知道这里的根本问题是什么。