【问题标题】:method firing twice during pageload in asp.net在 asp.net 中的页面加载期间触发两次的方法
【发布时间】:2011-12-18 18:40:50
【问题描述】:

我知道 SO 上已经有人问过这样的问题,我也经历了其中的大部分,但没有人让我满意,所以我发布了我的一个。附上我的代码。实际上,我正在从 databale 的代码中构建一个 jquery 库。看代码:

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



        private void DisplayHotProducts()
        {
            var dt = ProductData.GetAllHotProducsts();
            if (dt != null && dt.Rows.Count > 0)
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendLine(" <div id='spotlight_products' class='widget_box center_box'>");
                sb.AppendLine("<div class='wintitle'>");
                sb.AppendLine(" <div class='inner_wintitle'>");
                sb.AppendLine("  Hot Products</div></div>");
                sb.AppendLine("<div class='winbody'>");
                sb.AppendLine("<div class='mall_focus' id='mall_focus'>");
                sb.AppendLine("<a id='bp_carousel_prev'>prev</a>");
                sb.AppendLine("<a id='bp_carousel_next'>next</a>");
                sb.AppendLine("<div id='bp_carousel'>");
                sb.AppendLine(" <div class='carousel_list'>");


                for (int i = 0; i < dt.Rows.Count; i=i+5)
                {

                    sb.AppendLine(" <div class='product_list'>");
                    sb.AppendLine("<div class='bestproduct_wrapper'> <div class='bestproduct'>");
                    sb.AppendLine("   <div class='icon_best'></div>");
                    sb.AppendLine("<ul>");
                    sb.AppendLine(" <li class='best_Img'><span></span><a href='#' target='_blank'> ");
                    sb.AppendLine(string.Format(" <img src='{0}'  width='200' height='200'  /></a></li>", dt.Rows[i]["ImagePath"]));
                    sb.AppendLine("</ul>");
                    sb.AppendLine(" <p class='product_name'>");
                    sb.AppendLine(string.Format("<a href='Products/{0}'   target='_blank'>{1}</a></p>", dt.Rows[i]["Id"], dt.Rows[i]["Name"]));
                    sb.AppendLine("</div></div>");

                    for (int j = i+1; j <= 4; j++)
                    {
                        sb.AppendLine("<div class='product_item'>");
                        sb.AppendLine("<ul><li class='product_Img'>");
                        sb.AppendLine(string.Format("<a href='Products/{0}'><img src='{1}'  width='70' height='70'/></a>", dt.Rows[j]["Id"], dt.Rows[j]["ImagePath"]));
                        sb.AppendLine("</li></ul>");
                        sb.AppendLine(string.Format("<p class='product_name'><a href='Products/{0}'>{1}</a></p>", dt.Rows[j]["Id"], dt.Rows[j]["Name"]));
                        sb.AppendLine("</div>");
                    }
                }

                sb.AppendLine(@" </div></div></div></div></div>");
                ltlHotProducts.Text = sb.ToString();
            }
        }
    }

我后面的代码只有上面的代码,页面加载会触发两次。

这也是用户控件背后的代码,放置在一个页面上,我有 3 个类似的控件执行类似的功能,即从后面的代码构建 jquery 幻灯片。但是上述两个用户控件的 img 标签存在一些问题,因为其中一些缺少图像。放置用户控件的页面也有一个母版页。现在请给我建议解决方案。

所以层次结构是这样的:

Master Page (master) -&gt; Content Page (aspx) -&gt; Has-&gt;3 UserControls (ascx)

【问题讨论】:

  • 在 aspx 页面中为 AutoEventWireup 设置的值是什么?

标签: c# asp.net


【解决方案1】:

我通常看到 PageLoad 触发两次的两个原因 - 首先,如果您有一个没有 src 属性的 img 标签,IE 和 Chrome 都会再次请求该页面,这会导致该事件再次触发.其次,如果事件不止一次连接,它会触发不止一次;通常,当后面的代码包含事件连接代码(例如,this.PageLoad += ... PageLoad)并且页面指令 AutoEventWireup=True 包含在 aspx 文件中时,我会看到这种情况发生。

【讨论】:

  • 如果问题是没有 src 属性的 img 标签,则删除那些 img 标签(或确保它们获得有效的 src 属性,例如,通过添加“缺失图像”图像)。如果问题是两次连接事件,请删除其中一个(例如,删除 this.PageLoad += .. 代码行或将 AutoEventWireup 更改为 false。
  • 我的 img 标签在其他一些用户控件中变为空白,但它们在同一页面上。他们会制造这样的问题吗?
  • 他们可以(这里有一些关于这个问题的讨论:stackoverflow.com/questions/2009092/…) - 有一种相对简单的方法可以检查这是否是问题;只需暂时删除 img 标签,看看问题是否消失。
猜你喜欢
  • 2014-12-20
  • 2011-06-14
  • 1970-01-01
  • 2018-10-07
  • 2017-03-29
  • 1970-01-01
  • 2011-12-02
  • 2022-01-25
  • 1970-01-01
相关资源
最近更新 更多