为什么findcontrol(“x”)ASP.NET方法找不到通过javascript运行时生成的HTML控件?

为什么findcontrol(“x”)ASP.NET方法找不到通过javascript运行时生成的HTML控件?,javascript,asp.net,client-side,server-side,findcontrol,Javascript,Asp.net,Client Side,Server Side,Findcontrol,我的网页有一个可选的联系人面板,用户可以为任何联系人(如手机或电子邮件)添加输入文本,当用户单击“创建联系人”按钮时,它会生成一个具有唯一id(例如txtrelat1)或runat=“server”(在客户端,但网页的输入文本带有id=“txtrelat0”默认情况下),当用户单击submit按钮时,调用服务器端的register方法by onserverclick事件, 主要问题是,当我使用form1.FindControl(“txtrelat0”)时,它是find,我可以将其转换为HtmlI

我的网页有一个可选的联系人面板,用户可以为任何联系人(如手机或电子邮件)添加输入文本,当用户单击“创建联系人”按钮时,它会生成一个具有唯一id(例如
txtrelat1
)或
runat=“server”
(在客户端,但网页的输入文本带有
id=“txtrelat0”
默认情况下),当用户单击submit按钮时,调用服务器端的
register
方法by onserverclick事件, 主要问题是,当我使用
form1.FindControl(“txtrelat0”)
时,它是find,我可以将其转换为
HtmlInputText
,但当我需要
form1.FindControl(“txtrelat1”)
时,它不会找到并返回null?
thank's all

FindControl
在当前执行的页面或控件中查找服务器控件。它只处理服务器控件。隐藏的代码仍然可以读取从您添加的输入中发布的值。您可以调用
Request.Form[“x”]

缺点是,如果您向页面添加其他控件,然后进行回发,服务器页面将不会“记住”您添加的元素。他们会在回邮后消失

将这些类型的客户端/服务器行为与webforms混合在一起并不有趣。您可能会发现使用所有服务器控件更容易做到这一点。只需在服务器代码中设置
Visible=“false”
“true”
,以响应服务器事件。或者,您也可以使用API调用在客户机上完成这一切


尽管我不太喜欢webforms,但当我必须在webforms项目中工作时,使用服务器控件以webforms的方式进行工作通常会更容易。

您无法通过代码隐藏找到JavaScript控件。仅从客户端添加属性
runat=“server”
,并不意味着它会被选中。如果要从客户端查找已发布的值,应该能够通过文本元素的
name
属性从
Request.Forms
属性中挖掘它们。