【问题标题】:From UserControl page, Call Page_Prerender in Parent page从 UserControl 页面,在父页面调用 Page_Prerender
【发布时间】:2013-06-17 02:38:56
【问题描述】:

我有一个名为 MakeRedemption.aspx 的 aspx 页面,其中有一个 UserControl (Search.ascx)。

MakeRedemption.aspx 中有 Page_Prerender()。

我想问一下,如何通过 Search.ascx 中的函数调用 MakeRedemption.aspx 中的 Page_Prerender()。

如下:

实际上,我的用户控制页面中的某个功能存在循环。

Page_Prerender (MakeRedemption.aspx) 将在所有循环完成后触发。

我想要的是: 每次在循环的每个项目结束之前,我都会触发 MakeRedemption.aspx 上的 Page_Prerender 来做一些事情。
类似的东西:

for (int i = 0 ; i < 10 ; i ++)
{
//some code here

// I would like to trigger Page_Prerender here to do something before end of the loop.
}  // the Page_Prerender (in MakeRedemption.aspx) trigger after all the loop finish.

意味着这个for循环的i = 10,因此,我想在for循环内触发Page_Prerender 10次。

我在 aspx 文件中的 PreRender 函数如下:

protected void Page_Prerender(object sender, EventArgs e)
    {
        //some code here
    }

不确定这个 Page_PreRender() 是否被认为是自动生成的 OnPreRender()。

我想触发这个 Page_Prerender() 而不是 OnPreRender() 。

对不起,如果我问了一个愚蠢的问题,我是编程和 c# 的新手。

请多多指教。

谢谢。

【问题讨论】:

  • 所以让我直截了当地说,您想让子控件 (Search.ascx) 调用其父控件 (MakeRedemption.aspx) 10 次,每次循环迭代一次?究竟要做什么?我对父页面需要从搜索控件执行 10 次的操作感到困惑。从子控件中调用 ASP.NET 页面生命周期的一部分通常是一个糟糕的设计选择,但我很好奇您为什么觉得有必要这样做。
  • 谢谢卡尔。实际上,Search.ascx 中有一个 AddCart() 函数,当我在调试模式下运行这个系统时,我发现每次运行完 AddCart() 后,它也会运行 Page_Prerender()。但这是在 i = 1 的情况下。现在我想更改 i,可能是 10 或其他数字,但 Page_Prerender() 只会在最后一个 i 之后运行。我想要的是每次 i 触发 Page_Prerender()。如果我的问题有问题,请告诉我。 :)
  • AddCart() 和 Page_PreRender() 之间的逻辑关系是什么? Page_PreRender() 是否更新了显示购物车中另一个项目的 UI 元素?
  • 你好,卡尔。其实我是增强其他人的项目,这个项目开发者已经不在了,所以我没有一次可以问。正如我对代码的理解,AddCart() 和 Page_PreRender() 之间没有关系,我猜是,当 AddCart() 是在用户控制页面(Search.ascx)中运行的最终代码时,它会自动在父页面 (MakeRedemption.aspx) 中触发 Page_PreRender()。现在,如果我只是在 for 循环中调用 AddCart(),所有用户输入的数据将与最后一个 i 相同,尽管 i 每个 i 键入不同的数据(弹出窗口)。

标签: c# user-controls parent prerender


【解决方案1】:

最后我找到了方法,oodng 如下: 在 aspx.cs 页面中添加以下代码:

delegate void DelMethodWithoutParam();

protected void Page_Load(object sender, EventArgs e)
    {
        DelMethodWithoutParam delParam = new DelMethodWithoutParam(Page_prerender);
        this.ucSearchGifts.PageMethodWithNoParamRef = delParam;
    }
Page_prerender(){
//some code here...

}

并在用户控件cs页面中添加以下代码:

private System.Delegate _delNoParam;
    public Delegate PageMethodWithNoParamRef
    {
        set { _delNoParam = value; }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        _delNoParam.DynamicInvoke();
    }

当点击用户控制页面中的Button1时,将触发作为父页面的aspx页面中的Page_prerender()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多