如何在回发的文字控制中保留用户输入?

时间:2012-11-06 21:12:58

标签: c# asp.net vb.net visual-studio webforms

在Page_Init上,如果是回发,我检查是否单击了一个名为Button1的按钮,如果是,我将一个LiteralControl添加到一个名为Panel1的面板中:

Panel1.Controls.Add(new LiteralControl("Enter Code:<input type=\"text\" name=\"txtCode\"></td>"));  

正如您所看到的,只是文本“输入代码:”后跟一个名为txtCode的TextBox。

我有第二个按钮(Button2),点击后,我想检索在txtCode中输入的文字:

protected void Button2_Click(object sender, EventArgs e)
    {
        foreach (Control c in Panel1.Controls)
        {
            if (c is LiteralControl) ...                
        }
    }

我不知道怎么做...我怎样才能在txtCode中输入文字?

2 个答案:

答案 0 :(得分:2)

您始终可以使用 Request.Form 集合:

string txtCode = Request.Form["txtCode"];

它将包含随当前请求发布的所有值,无论是否为服务器端控件。

答案 1 :(得分:2)

生成的输入在转向(HTTP GET然后POST)后不会保留其值,因为它不是具有ViewState的System.Web.UI.Control。因此,用户输入的值在表单集合中,您可以尝试从那里获取它(Request.Form),但更简单的方法是在Init(..)中添加TextBox。之后,应该在POST上加载文本框的ViewState,并且可以在其Text属性中访问用户的输入。

在Init()中:

_MyTextBox = new TextBox();
panel1.Controls.Add(_MyTextBox);

在Button_Click中:

var value = _MyTextBox.Text ;