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

时间:2012-10-18 22:52:33

标签: asp.net postback dynamic-controls

我加载了一段包含以下内容的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),因为它作为文本呈现为Literal控件和所有输入控件未添加到容器的控件集合中。我绝对可以使用Request.Form["ViewTitle"]来访问它的值,但是如何设置它的值?

2 个答案:

答案 0 :(得分:0)

您的流程错误,您正在使用属性runat="server"

向客户端呈现控件

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

由于您的目标是添加TextBox(如果我错了,请更正我),那么为什么不在表单的控件集合中添加新的TextBox ??? p>

这样的事情:

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;

I have created several working examples and they are online on my GitHub site, feel free to browse the code

答案 1 :(得分:0)

Jupaol的方法是向页面添加动态控件的首选方法。

如果要插入字符串,可以使用ParseControl

但是,它不会导致某些控件(例如PlaceHolder)的编译。