访问从后面的代码动态生成的控件



i加载一块html,其中包含类似的东西:

 <em> < input type="text" value="Untitled" name="ViewTitle" id="ViewTitle" runat="server"> </em>

进入我的控制。HTML是用户定义的,请不要要求我在ASPX页面上静态添加它们。

在我的页面上,我有一个占位符,我可以使用

LiteralControl target = new LiteralControl ();
// html string contains user-defined controls
target.text = htmlstring

渲染属性。我的问题是,由于它是HTML件,即使我知道输入框的ID,我也无法使用FindControl("ViewTitle")访问它(它将仅返回null),因为它将其作为文本呈现为文字控件,并且所有输入控件都没有添加到容器的控制集。我绝对可以使用Request.Form["ViewTitle"]访问其值,但是如何设置其值?

jupaol的方法是将动态控制添加到页面的首选。

如果要插入字符串,则可以使用parsecontrol。

但是,它不会引起某些控件(例如占位符)的汇编。

您的过程是错误的,您正在用属性向客户端渲染一个控件: runat="server"

此属性仅在服务器处理时才有效,您只是呈现

由于您的目标是添加TextBox(如果我错了,请纠正我),那么为什么不向表格的控件集合添加新的TextBox

类似的东西:

protected void Page_Init(object sender, EventArgs e)
{
    var textbox = new TextBox { ID="myTextBoxID", Text="Some initial value" };
    this.myPlaceHolder.Controls.Add(textbox);
}

并检索它:

var myDynamicTextBox = this.FindControl("myTextBoxID") as TextBox;

我创建了几个工作示例,它们在我的GitHub网站上在线,随时浏览代码

最新更新