【问题标题】:How to call usercontrol file before any other file?如何在任何其他文件之前调用 usercontrol 文件?
【发布时间】:2014-07-14 09:09:24
【问题描述】:

我有一个包含各种用户控件的母版页。我有一个页面说 mypage.aspx 继承了母版页。那么是否可以在 mypage.aspx 的 .cs 文件之前调用 usercontrol 的 .cs 文件?

【问题讨论】:

  • 您的用户控制代码将始终被首先调用。你想在其他代码调用之前调用什么代码。 Pleac 构造函数中的代码。
  • 你的意思是首先调用 usercontrol 文件然后只调用运行的文件?我不认为这是真的,因为如果我在 userconrtol 文件和 aspx 文件的 page_load 中放置换行符,则bebugger 转到 aspx.cs 页面的 page_load 然后只转到 ascx.cs 的 page_load
  • 在这种情况下,不要在用户控件中创建一个函数并首先从 aspx 页面调用..
  • 是的,我已经在用户控件中创建了函数,但是我如何从 aspx 页面调用该函数。
  • 公开该函数并使用该用户控件的对象访问它。

标签: c# asp.net user-controls


【解决方案1】:

您“调用 .cs 文件”的概念是完全错误的。 (.cs) 文件背后的代码包含在页面生命周期中运行的代码,这基本上是一连串依次发生的事件,例如 InitLoadClickChanged 事件处理程序, PreRender...

因此,正确的做法是询问事件处理程序之前是否在母版页、页面或用户控件中运行。或者在用户控件中选择哪个事件,以便它在页面中的其他代码之前运行。

在页面和嵌套用户控件中调用相同事件的顺序可以是从上到下(从主控件到大多数嵌套用户控件),反之亦然。这取决于事件在哪里。 IE。有些事件首先在页面中运行,然后在嵌套控件中运行,而其他事件则完全相反:首先在嵌套控件中运行,然后在页面中运行。

所以你的问题应该更具体,比如“我想在页面中的其他代码运行之前运行用户控件的这个代码”。然后,您只需在每个事件中选择正确的事件处理程序即可以正确的顺序运行它。您还必须考虑在调用每个事件之前和之后发生的情况(例如,在PreInit 中,ViewData 尚不可用)。

我有一个related answer,它解释了何时连接事件处理程序,以及为什么,它引用了一个与您的问题类似但更具体的问题。如果您阅读了该答案,特别是其中包含的“页面生命周期”链接,您将了解解决问题所需要做的事情。特别是最后一个链接,我在这里复制:

看这张图可以看到Page & children事件的执行顺序:ASP.NET Page Life Cycle Diagram

【讨论】:

  • 好的,这很有帮助..umm 那么我如何在 aspx 页面中调用 usercontrol 的函数。
  • 请详细说明你想做什么,我可以给你一个具体的答案。 IE。您的用户控件的外观,您需要调用哪个函数以及何时调用。如果不是,我不能盲目地给出答案。您应该更新(编辑)您的问题。
  • 这里是场景。我有各种用户控件。它们都包含在母版页中。我有一个实现母版页的aspx页面。所以用户控件与aspx页面没有直接关系用户控件是通过母版页加载的。即用户控件也包含在 aspx 页面中。现在当我运行 aspx 页面时,首先编译 aspx.cs 的 page_load。我需要提前编译函数或用户控件的 page_load aspx。它可能吗?如果可能的话怎么做?我希望现在场景很清楚。
  • 两个cmets: 1) 说的清楚一点,不过说“aspx.cs的page_load先编译”还是不太好理解。您应该说一些更具体的内容,例如“页面的 Page_Load 事件在用户控件的 Page_Load 事件之前运行,我需要先运行该代码。这是此事件中的代码:”。相信我,这对帮助您很有必要 2)请使用此附加信息更新问题。 - 我确定有解决方案,我想提供帮助,但请让它更容易。您可以编辑问题吗?我不确定你是否有权这样做
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-02
  • 2013-05-18
  • 1970-01-01
  • 2018-08-01
  • 2021-11-27
相关资源
最近更新 更多