1

首先-如果您想要问题的简短版本,请向下滚动直到看到问题:

好吧,在过去一年左右的时间里,我遇到了很多关于动态控件的各种场景的问题——也就是说,通过 JavaScript 或 C# 以编程方式创建的控件,然后添加到 aspx 页面。在我的工作地点添加动态控件的一种看似最喜欢的方式似乎是以下几种变化:-

ASPX

<div id='divExample'>

JavaScript

document.getElementById('divExample').innerHTML = "some random html code and controls here"

现在在过去的一年里,我们还推动将我们的 Web 应用程序从仅 IE 转变为跨浏览器兼容 - 重点是让 Safari 启动和运行......并且出现了很多与动态相关的问题控制。我的高级开发人员坚持认为,没有必要对给我们带来问题的动态控件的呈现方式进行重大重新编码......

当然,经过一些研究,我得到了 ASP 生命周期的基本信息,并且动态控件需要在每次回发时重新创建 - 我相信 - 在 Page_Load 方法执行之前。因此,我通过一些相当费力的控制重新编码解决了大部分问题 - 将初始化移至 Page_PreLoad 方法并将大量 JavaScript“innerHTML = 'some string of plain html etc'”渲染更改为基于 C# 对象的初始化。

现在,无论我是否在这里弄错了一些事实,我都知道这已经奏效并解决了我的问题。现在这篇文章的症结是我一直在试图弄清楚这个问题的确切实际原因,我相信这与渲染元素的 innerHTML 的排序有关,但是没有多少搜索能够告诉我这到底是什么时候将发生在 ASP 页面生命周期中。我的前辈会问为什么有必要再次我毫不怀疑 - 尽管不用说他所有的想法都没有奏效......

...

好吧,对不起华夫饼,简而言之:-

问题: 在 ASP 生命周期中的什么时候,元素的 innerHTML 会被呈现,这对附加到以这种方式呈现的控件的事件有什么后果 - 处理这种情况的正确方法是什么?

任何输入表示赞赏,感谢阅读。

4

1 回答 1

0

javascript innerHtml 属性将在 ASP.net 生命周期完成后呈现,因为它发生在服务器端。因此,它不会影响生命周期内的 C# 代码。

关于回发,将回发视为一个全新的请求 - 在所有服务器端事件完成后,您的控件将需要重新生成。

于 2013-07-23T15:32:44.970 回答