2012-10-18 48 views
1

我加载一段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"]来获得它的价值,但我怎样才能设定它的价值?

回答

0

Jupaol的方法是添加动态控制页面的喜欢的方式。

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

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

+0

ParseControl对我来说是正确的功能。我们收到用户输入模板,需要从中动态生成控件。 – user648922

0

你的程序是否有误,要渲染控制与属性的客户端: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; 

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