簡體   English   中英

從代碼隱藏創建aspx文本框

[英]Creating aspx textbox from codebehind

如何從C#中的代碼創建aspx文本框以及如何在代碼后面訪問它的值? 我這樣做如下,但在每個帖子后面的文本框都被清除。 我需要在帖子后面保留它的價值。

TextBox txt = new TextBox();
txt.ID = "strtxtbox";
txt.CssClass = "CSS1";
StringBuilder sb = new StringBuilder();
StringWriter writer = new StringWriter(sb);
HtmlTextWriter htmlWriter = new HtmlTextWriter(writer);
txt.RenderControl(htmlWriter);

//lbl is an aspx label
lbl.text += @"<td style='width: 5%;'>" + sb.ToString() + "</td>";

我按如下方式訪問文本框值

string tb = Request.Form["strtxtbox"].ToString();

您可以從創建TextBox控件開始。 它必須在完成Init() Page_Init()PreInit() Page_PreInit()方法,你必須這樣做,無論Page.IsPostBack 這將在加載ViewState之前將元素放在頁面上,並允許您在回發時檢索該值。

var textBox = new TextBox();

然后你應該在它上面設置一些屬性,包括一個ID,以便你以后可以找到它:

textBox.ID = "uxTxtSomeName";
textBox.MaxLength = 10; // maximum input length
textBox.Columns = 20; // character width of the textbox
etc...

然后,您需要將其添加到頁面上的適當容器( Page ,或您希望它出現在哪個控件中):

parentControl.Controls.Add(textBox);

然后在回發后,您可以使用父的FindControl()函數檢索值,可能在Load()方法( Page_Load() )中:

var input = (parentControl.FindControl("uxTxtSomeName") as TextBox).Text;

注意:內置的FindControl()僅迭代直接子節點。 如果要搜索整個嵌套服務器控件樹,可能需要實現自己的遞歸 FindControl()函數。 雖然在[so]上有一百萬個遞歸FindControl()函數的例子,所以我會把它留給你。

問題是,除非您每次都重新創建控件,否則控件將無法在回發中使用,這是有問題的。

我過去使用的一個解決方案是DynamicControlsPlaceholder,你可以在這里查看

根據注釋中的代碼創建文本框

TextBox myTextBox=new TextBox();

但是,您必須設置ID /名稱。 此外,您必須在每個回發,預渲染或之前創建文本框,以便填充該值。 如果您將文本框的創建延遲到頁面生命周期的后期,則不會從回發中填充該值,然后您必須手動從Request.Response []集合中檢索它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM