访问ClientID会中断回发

时间:2009-09-10 09:13:46

标签: asp.net controls page-lifecycle

有时候我在使用ASP.Net时会感到绝望 - 另一个不应该出现的问题!

在Web表单上有一个ASP表。在ASP表中有一个用户控件,我正在进行一些更改。在ASP表中有一个文本框....到目前为止没有任何异常!

在后面的代码中,作为Page_Load的一部分,我需要访问文本框的ClientID以便注册一些javascript ...所以我这样做并且javascript似乎做了它需要的一切。每个人都很开心。

不,显然每个人都不高兴,ASP.Net本身非常不满意!

在访问ClientID时,源中显示的ID为:

myControl_myTextBox

注释掉访问ClientID的行意味着id呈现为:

ctl00_BodyPlaceHolder_myControl_myTextBox

访问ClientID的行如下所示:

jsBuilder.AppendFormat(@"var filter = new TBFilter($(""#{0}"")[0]);", myTextBox.ClientID);

这本身并没有打扰我,但它打破了回发的事实呢!如果您在该文本框中键入内容并点击提交按钮(页面上有一个提交按钮!),它会重新加载页面,但会将默认值放回文本框中并完全忽略您原来的内容。疯狂 - 我没有做过任何特别奇怪和不寻常的事情,为什么它会打破回传?

1 个答案:

答案 0 :(得分:3)

你在页面加载中注册的javascript,是否会做一些不应该在回发中发生的事情?如果是这样,您应该检查Page.IsPostback以控制何时使用它。

您还应该知道,在页面生命周期中,Page_Load发生在任何控制回发事件之前(例如按钮上的Click事件)。因此,如果您注册的javascript代码取决于Click事件的结果,您应该在Click事件中注册它(如果它只应该在单击该按钮时发生),或者{{1事件(如果它应该总是发生)。

修改
也可能是在Page_Load之后对如何创建客户端ID进行了一些更改。最好在Page_PreRender事件中执行此操作以确保所有内容都已完成加载。