Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 访问ClientID会中断回发_Asp.net_Controls_Page Lifecycle - Fatal编程技术网

Asp.net 访问ClientID会中断回发

Asp.net 访问ClientID会中断回发,asp.net,controls,page-lifecycle,Asp.net,Controls,Page Lifecycle,有时我在使用ASP.Net时确实感到绝望——这是另一个不应该出现的问题 在web窗体上有一个ASP表。在ASP表中有一个用户控件,我正在对其进行一些更改。在ASP表中有一个文本框…到目前为止没有任何异常 在后面的代码中,作为页面加载的一部分,我需要访问文本框的ClientID以注册一些javascript…所以我这样做了,javascript似乎做了它需要做的一切。大家都很高兴 不,不,显然每个人都不开心,ASP.Net本身也很不开心 访问ClientID时,源中显示的id为: myContro

有时我在使用ASP.Net时确实感到绝望——这是另一个不应该出现的问题

在web窗体上有一个ASP表。在ASP表中有一个用户控件,我正在对其进行一些更改。在ASP表中有一个文本框…到目前为止没有任何异常

在后面的代码中,作为页面加载的一部分,我需要访问文本框的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);

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

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

您还应该注意,在页面生命周期中,
页面加载
发生在任何控件回发事件之前(例如,
单击
事件打开按钮)。因此,如果您注册的javascript代码取决于
Click
事件的结果,那么您应该在
Click
事件中注册它(如果它只在单击该按钮时发生),或者在
Page\u PreRender
事件中注册它(如果它总是发生)

编辑:

也可能是在页面加载后对客户端id的创建方式进行了一些更改。最好在
Page\u PreRender
事件中执行此操作,以确保所有内容都已完成加载。

如果我理解正确,文本框的ClientID属性最初是ctl00\u BodyPlaceHolder\u myControl\u myTextBox,但回发后,ClientID现在是文本框的myControl\u myTextBox?不,抱歉,如果我访问ClientID属性,id将显示为myControl_myTextBox,但如果我注释掉该行,id将显示为ctl00_BodyPlaceHolder_myControl_myTextBox-我将编辑问题以反映此JSBuilder.AppendFormat(@“var filter=new TBFilter($(“{0}”)[0]),myTextBox.ClientID@IP—如果将JavaScript放在页面中并使用var filter=new TBFilter($(“#”)[0]),会发生什么;你还得到同样的结果吗?我已经把它移到了Page_PreRender中,这似乎解决了问题。还是不认为一开始就应该是个问题!