有时候我在使用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);
这本身并没有打扰我,但它打破了回发的事实呢!如果您在该文本框中键入内容并点击提交按钮(页面上有一个提交按钮!),它会重新加载页面,但会将默认值放回文本框中并完全忽略您原来的内容。疯狂 - 我没有做过任何特别奇怪和不寻常的事情,为什么它会打破回传?
答案 0 :(得分:3)
你在页面加载中注册的javascript,是否会做一些不应该在回发中发生的事情?如果是这样,您应该检查Page.IsPostback
以控制何时使用它。
您还应该知道,在页面生命周期中,Page_Load
发生在任何控制回发事件之前(例如按钮上的Click
事件)。因此,如果您注册的javascript代码取决于Click
事件的结果,您应该在Click
事件中注册它(如果它只应该在单击该按钮时发生),或者{{1事件(如果它应该总是发生)。
修改强>
也可能是在Page_Load之后对如何创建客户端ID进行了一些更改。最好在Page_PreRender
事件中执行此操作以确保所有内容都已完成加载。