在ASP.NET站点完全完成渲染时执行代码

时间:2015-11-26 10:39:23

标签: c# asp.net events label repeater

我环顾四周,试图找到一个解决方案,但却找不到一个我可以适应我的问题。

基本上我有一个转发器从SQL数据库中拉出图像路径,它有3个值定义高度,宽度和价格,在图像下显示3个标签。但是我不希望标签显示值是否为0,所以我写了这个foreach来对它进行排序:

foreach (RepeaterItem Rep1 in Repeater1.Items)
{
        //assigns a temporary variable the value of the control we find.
        Label nullPris = (Label)Rep1.FindControl("PrisLabel");
        Label nullHeight = (Label)Rep1.FindControl("HeightLabel");
        Label nullWidth = (Label)Rep1.FindControl("WidthLabel");

        //Checks if the lable has the text we're looking for.
        if (nullPris.Text == "0,00 Kr.-" || nullPris.Text == "0.00 Kr.-")
        {
            //If it has, stop rendering the label.
            nullPris.Visible = false;
        }

        if (nullHeight.Text == "Højde: 0,00 cm" || nullHeight.Text == "Højde: 0.00 cm")
        {
            //If it has, stop rendering the label.
            nullHeight.Visible = false;
        }

        //Checks if the lable has the text we're looking for.
        if (nullWidth.Text == " Bredde: 0,00 cm" || nullWidth.Text == "Bredde: 0.00 cm")
        {
            //If it has, toggle the visibility..
            nullWidth.Visible = false;
        }
}

代码本身按预期工作,但我遇到了两个问题:

  • 如果我在任何Page_Events中调用代码它不起作用,代码会运行,但找不到转发器,所以完全跳过其余部分,如果我把它放在一边无关紧要在Page_LoadPage_Unload中,两者似乎都在转发器完成其工作之前执行。

  • 其次,我通过标签本身通过OnLoad调用代码解决了这个问题,但是最后加载的项目不会受到影响,无论数据库中的项目数量如何,都会发生这种情况。 / p>

提前致谢!

2 个答案:

答案 0 :(得分:1)

我找到了解决问题的方法,不需要我等待页面加载。

我发现其他人在转发器创建的项目上使用For For循环时遇到了类似的问题,因此我每次使用OnItemDataBound方法将新项目绑定到转发器时取出循环并执行代码,我修改后的代码如下所示:

protected void Repeater1_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{

    {
        //assigns a temporary variable the value of the control we find.
        Label nullPris = (Label)e.Item.FindControl("PrisLabel");
        Label nullHeight = (Label)e.Item.FindControl("HeightLabel");
        Label nullWidth = (Label)e.Item.FindControl("WidthLabel");

        //Checks if the lable has the text we're looking for.
        if (nullPris.Text == "0,00 Kr.-" || nullPris.Text == "0.00 Kr.-")
        {
            //If it has, stop rendering the label.
            nullPris.Visible = false;
        }

        if (nullHeight.Text == "Højde: 0,00 cm" || nullHeight.Text == "Højde: 0.00 cm")
        {
            //If it has, stop rendering the label.
            nullHeight.Visible = false;
        }

        //Checks if the lable has the text we're looking for.
        if (nullWidth.Text == " Bredde: 0,00 cm" || nullWidth.Text == "Bredde: 0.00 cm")
        {
            //If it has, toggle the visibility..
            nullWidth.Visible = false;
        }
    }
}

答案 1 :(得分:0)

如果可能的话尝试查看ajax调用/ javascript基本上你想在文档准备就绪时触发一个函数......对吗?

A small description of what I'm trying to say