[英]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.