![](/img/trans.png)
[英]C# Programmatically created richtextbox and get text value from button
[英]Get value from programmatically created TextBox in C#
我遇到了這個瘙癢的問題,我無法使代碼正常工作
發布表單時如何從TextBox中讀取值?
一些代碼...
protected override void CreateChildControls() {
base.CreateChildControls();
TextBox queryBox = new TextBox();
queryBox.ID = "querybox";
queryBox.ToolTip = "Enter your query here and press submit";
Controls.Add(queryBox);
Button queryButton = new Button();
queryButton.UseSubmitBehavior = false;
queryButton.ID = "querybutton";
Controls.Add(queryButton);
if (Page.IsPostBack == true) {
try {
string query = querybox.Text;
DataGrid dataGrid = new DataGrid();
dataGrid.DataSource = Camelot.SharePointConnector.Data.Helper.ExecuteDataTable(query, connectionString);
dataGrid.DataBind();
Controls.Add(dataGrid);
} catch (Exception a) {
Controls.Add(new LiteralControl(a.Message));
} // try
} // if
} // void
我將代碼縮短了一點,但是您看到了這個主意,它的字符串query = querybox.text無法正常工作。 我嘗試了幾種不同的變體,即
TextBox querybox = (TextBox)FindControl("querybox");
string query = querybox.Text;
但不是...
任何提示表示贊賞! 謝謝
問題是您的控件沒有填充CreateChildControls中ViewState中的值。 建議您在按鈕上使用click事件處理程序。
更新您的按鈕代碼:
Button queryButton = new Button();
queryButton.UseSubmitBehavior = false;
queryButton.ID = "querybutton";
queryButton.Text = "Query";
queryButton.Click += new EventHandler(queryButton_Click);
Controls.Add(queryButton);
然后,編寫click事件處理程序:
void queryButton_Click(object sender, EventArgs e)
{
TextBox querybox = this.FindControl("querybox") as TextBox;
try
{
string query = querybox.Text;
DataGrid dataGrid = new DataGrid();
dataGrid.DataSource = Camelot.SharePointConnector.Data.Helper.ExecuteDataTable(query, connectionString);
dataGrid.DataBind();
Controls.Add(dataGrid);
}
catch (Exception a)
{
Controls.Add(new LiteralControl(a.Message));
} // try
}
嘗試逐步瀏覽並查看Request.Form["name"]
對象。
可能發生的情況是您的“文本”框可能沒有在視圖狀態下正確保存,但是如果在回發時它是有效的表單對象,則它應該存在於Request.Form對象中,因此ID可能會有所不同,因此您可能必須做一些搜索。
Trikks,
我發現這可能對您有幫助。
嘗試在load事件中查找文本框(檢查其回發后!),而不要查找CreateChildControls,后者將您的代碼分離開來並使事情變得更清晰。 正如Mmerrell所說,id可能也會更改,具體取決於頁面的其余部分。
您會得到null引用異常,因為您執行了
TextBox querybox = (TextBox)FindControl("querybox");
在PAGE對象上。 所以您正在搜索page-> querybox
但是該文本框位於page-> form1-> querybox中。
您需要編寫一個遞歸的findcontrol,因為querybox是form1控件中的一個控件,而不是頁面中的一個控件。
public static Control FindControlRecursive(Control container, string name)
{
if ((container.ID != null) && (container.ID.Equals(name)))
return container;
foreach (Control ctrl in container.Controls)
{
Control foundCtrl = FindControlRecursive(ctrl, name);
if (foundCtrl != null)
return foundCtrl;
}
return null;
}
將代碼包裝在!Page.IsPostBack檢查中可能會有所幫助。 否則,文本框將在回發時重新創建並刪除所有信息。
if (!Page.IspostBack) {
TextBox queryBox = new TextBox();
queryBox.ID = "querybox";
queryBox.ToolTip = "Enter your query here and press submit";
Controls.Add(queryBox);
Button queryButton = new Button();
queryButton.UseSubmitBehavior = false;
queryButton.ID = "querybutton";
Controls.Add(queryButton);
} else {
try {
string query = querybox.Text;
DataGrid dataGrid = new DataGrid();
dataGrid.DataSource = Camelot.SharePointConnector.Data.Helper.ExecuteDataTable(query, connectionString);
dataGrid.DataBind();
Controls.Add(dataGrid);
} catch (Exception a) {
Controls.Add(new LiteralControl(a.Message));
} // try
} // if
哦,不要相信用戶在您的數據庫上輸入查詢。
您的數據庫將崩潰並刻錄
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.