2012-10-18 83 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