C# ASP.NET页面在Visual Studio 2012中不断重新加载

C# ASP.NET页面在Visual Studio 2012中不断重新加载,c#,asp.net,webforms,C#,Asp.net,Webforms,我做了一些搜索,结果是空的。当我搜索短语时,通常会有人问我如何让页面不断重新加载。我的问题正好相反 情况:我在IIS Express或ASP.NET开发服务器上运行了两组功能完全相同的代码(“测试”分支和“生产”分支-一周前合并为完全相同)。唯一的区别是他们调用的数据库(我甚至将其设置回原来的位置,以便他们调用相同的数据库)。当然,为了调试的目的,我们在这里和那里做了一些更改,但代码的功能没有任何不同 问题是:我们有一个脚本Products.aspx,它处理虚拟页面(与WordPress非常相似

我做了一些搜索,结果是空的。当我搜索短语时,通常会有人问我如何让页面不断重新加载。我的问题正好相反

情况:我在IIS Express或ASP.NET开发服务器上运行了两组功能完全相同的代码(“测试”分支和“生产”分支-一周前合并为完全相同)。唯一的区别是他们调用的数据库(我甚至将其设置回原来的位置,以便他们调用相同的数据库)。当然,为了调试的目的,我们在这里和那里做了一些更改,但代码的功能没有任何不同

问题是:我们有一个脚本Products.aspx,它处理虚拟页面(与WordPress非常相似),称为“类别”,因为它的主要用途是在我们的电子商务软件中显示产品组。在测试分支上,此页面以瞬间到几秒钟之间的随机间隔重新加载。它没有注册为回发(单步执行时,
if(!IsPostBack)
注册为
true

当它进行这些无限调用时,它每次通过页面都会创建一个新线程。Chrome Developer Tools表示“等待”时间为1.5-2分钟(上次为1.7分钟),而
WebResource.axd
ScriptResource.axd
则持续“等待”数分钟

有什么想法吗

编辑:一些代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack && !IsCallback)
        LoadList();
}

private void LoadList()
{
    int categoryId = Http.PrmIntOrZero["CategoryId"];
    string search = Http.PrmOrEmpty["Search"];

    DataRow c = DBCategory.GetOrNull(categoryId);
    if (c == null)
    {
        Response.Redirect("~/", true);
        return;
    }

    TitleC.Text = (string)c["Name"];
    Description.Text = System.Convert.ToString(c["Description"]);
}
注意:Http.PrmIntOrZero只是一种用较短的行调用querystring的方法


编辑2:我继续并将其提交到一个真实的环境中,效果很好。我无法解释它,但它一定与Visual Studio在特定开发服务器上的调试过程有关,只是它也发生在IIS Express中…

这行写着
Response.Redirect(“~/”,true)是罪魁祸首

它将向浏览器发送302到根页面。既然您提到这个页面处理虚拟页面,我想它也会处理对
“/”
的请求。当页面再次加载时,您可能不会再次从数据库中获取记录,它会再次重定向。这显然将无休止地继续下去

注意:ASP.NET不会将302浏览器重定向识别为回发,因此,
if
-子句不会保护页面不进入循环


您在响应时间上看到的差异可能是因为存在各种挂起的请求,有时线程池已用完,它必须等待几个请求完成。

代码行DataRow c=DBCategory.GetOrNull(categoryId);始终获取空值,因此请确保数据库中有数据

  protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack && !IsCallback)
            LoadList();
    }

    private void LoadList()
    {
        int categoryId = Http.PrmIntOrZero["CategoryId"];
        string search = Http.PrmOrEmpty["Search"];

        DataRow c = DBCategory.GetOrNull(categoryId);
        if (c == null)
        {
            Response.Redirect("~/", true);
            return;
        }

        TitleC.Text = (string)c["Name"];
        Description.Text = System.Convert.ToString(c["Description"]);
    }

结果是我们有一个我不知道的控件(我从以前的开发人员那里继承了这个项目)导致了这个问题

protected override void OnPreRender(EventArgs e)
    {
        string text = this.ImageUrl;
        if (this.TemplateImageUrl != null)
        {
            text = this.TemplateImageUrl;
        }
        if (this.LoadedImageUrl != text)
        {
            Uri requestUri = new Uri(HttpContext.Current.Request.Url, base.ResolveClientUrl(text));
            try
            {
                using (WebResponse response = WebRequest.Create(requestUri).GetResponse())
                {
                    System.Drawing.Image image = System.Drawing.Image.FromStream(response.GetResponseStream());
                    this.Width = image.Width;
                    this.Height = image.Height;
                    this.LoadedImageUrl = text;
                }
            }
            catch (Exception)
            {
            }
        }
        base.OnPreRender(e);
    }

问题是
base.OnPreReender(e)一遍又一遍地调用自己。

是否在没有用户干预的情况下发回?例如,单独使用(!Page.IsPostBack&&!Page.IsCallback)?您能为您的产品发布一些示例代码吗?aspx Page?@davenewza是的,在页面内容最终加载之前和之后,无需用户干预。我可以想出两种方法使页面按照您描述的方式运行(重新加载,而不是回发)。一是使用“刷新”元指令(),二是执行“window.location.href=window.location.href;”javascript。在你不知道的情况下,这两种情况是如何发生的?我不能说。通常情况下,这是正确的,但是在重写模块中设置了
/catalog/*.aspx
部分,以便任何其他URL都可以到达它应该到达的位置。因此,
“/”
物理上转到Default.aspx,而不是指向此页面。您能否在那里设置断点,并检查是否至少这是它一直在重新加载的原因?也许你在本地有不同的重写规则,我在那里设置了一个断点,是的。每次重新加载
c
时,它都不是
null
,因此它从不点击重定向。当我加载
/
/Default.aspx
时,它从不点击重定向。嗯,好吧,不是这样。我建议的另一种调试方法是使用HttpFiddler并检查请求。如果我没有弄错的话,HttpFiddler可以选择检查是什么触发了请求。谢谢,Kenneth。我去看看。如果它在VS中的另一个“网站”上完美地工作(在相同的代码中),我倾向于认为dev服务器的特定实例出现了问题。我将尝试更多的事情,看看会发生什么。我已经说过,当我逐步通过它时,它没有空值。或者它会重定向到主页(它做得非常好)。所以这不是问题所在。请看,我在不同的dev服务器实例(来自同一数据库)上运行的同一代码上得到了不同的结果。