回发后TextBox值将丢失 [英] TextBox values are lost after postback

查看:62
本文介绍了回发后TextBox值将丢失的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好我正在动态创建文本框,然后将值插入到生成的每个文本框中,所以我想获取按钮的click事件的值,但是一旦按钮被触发,值就不会加载到页面中......

1.这是我的Html标记:



Hi I am creating textboxes dynamically,then insert values to each textbox generated,so I want to get the values on click event of a button but once a button is get fired, the values are not loaded in a page...
1.This is my Html markup:

<form id="form1" runat="server">
    <div>
        <asp:TextBox ID="txtNumber" runat="server" ></asp:TextBox>
        <br />
        <asp:Button ID="btn" runat="server" Text="Generate" OnClick="GenerateTextBoxes_onClick" />
        <asp:Panel ID="pnlDate" runat="server"></asp:Panel>
    </div>
    <div>
        <asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btn_Click" />
    </div>
</form>





And这是我正在使用的代码隐藏文件:



And This is my code behind file I am using:

protected void Page_Load(object sender, EventArgs e)
{

}

protected void GenerateTextBoxes_onClick(object sender, EventArgs e)
{
    int number = Convert.ToInt32(txtNumber.Text);
    string top = "";
    int left = 0;
    
    TextBox txt;
    Table tb = new Table();
    tb.ID = "tb1";
    TableRow tr = new TableRow();
    
    
    for (int i = 1; i <= number; i++)
    {
        txt = new TextBox();
        txt.ID = "textBox" + i.ToString();
        txt.Attributes.Add("runat", "server");
        txt.CssClass = "myDates";
        txt.Width = Unit.Pixel(240);
        txt.MaxLength = 1;
        txt.EnableViewState = true;
        txt.Style.Add(HtmlTextWriterStyle.Position, "relative");
        txt.Style[HtmlTextWriterStyle.Left] = left + "px";
        left += 5;
        
        TableCell tc = new TableCell();
        tc.Controls.Add(txt);
        tr.Controls.Add(tc);
        tb.Controls.Add(tr);
        Panel1.Controls.Add(txt);
    } // [edit] The brackets were not balanced, I'll assume this one belongs here?

    pnlDate.Controls.Add(tb);
}

public void btn_Click(object sender, EventArgs e)
{
    //GenerateTxtB();
    Table t = (Table)Page.FindControl("pnlDate").FindControl("tb1");
    TextBox textbox;
    
    foreach (TableRow tr in t.Rows)
    {
        foreach (TableCell tc in tr.Cells)
        {
            foreach (Control c in tc.Controls)
            {
                if (c.GetType() == typeof(TextBox))
                {
                    textbox = (TextBox)c;
                    Response.Write("TextBox Value is:" + textbox.Text + "<br/>");
                }
            }
        }
    }
}





可以帮助我如何保持值,然后像我对response.write(...)



Can some help me how to keep the values and then display them as I did with the response.write(...)

推荐答案

那样显示它们



动态创建的控制值在回发时总是变为空白。使用javascript事件来获取所有文本框值。
Hi,

dynamically created control value always get blank at time of postback. Use instead javascript event to get all textbox values.


您好,当回发发生时,您无法获得动态创建的控件值,您可以做的一件事是在GenerateTextBoxes_onClick事件中创建动态文本框,在页面加载中执行它,因为页面加载首先在按钮点击时触发,你可以获取值。
Hi you cannot get the dynamicaaly created control values when postback happens, one thing you can do is instead of creating dynamic text box in GenerateTextBoxes_onClick event,do it in page load since page load fires first on button click,u can get the values.


检查下面的代码我修改了一些部分(即页面加载和生成控制事件)我认为这会解决你的问题



Check the below code i have modify some of the section (i.e. page load and generate control event. I think this will solve your problem

protected void Page_Load(object sender, EventArgs e)
        {
            CreateCOntrols();
        }
        protected void GenerateTextBoxes_onClick(object sender, EventArgs e)
        {
            pnlDate.Controls.Clear();
            CreateCOntrols();
            
        }

        private void CreateCOntrols()
        {
            if (txtNumber.Text != "")
            {
                int number = Convert.ToInt32(txtNumber.Text);
                string top = "";
                int left = 0;

                TextBox txt;
                Table tb = new Table();
                tb.ID = "tb1";
                TableRow tr = new TableRow();


                for (int i = 1; i <= number; i++)
                {
                    txt = new TextBox();
                    txt.ID = "textBox" + i.ToString();
                    txt.Attributes.Add("runat", "server");
                    txt.CssClass = "myDates";
                    txt.Width = Unit.Pixel(240);
                    txt.MaxLength = 1;
                    txt.EnableViewState = true;
                    txt.Style.Add(HtmlTextWriterStyle.Position, "relative");
                    txt.Style[HtmlTextWriterStyle.Left] = left + "px";
                    left += 5;

                    TableCell tc = new TableCell();
                    tc.Controls.Add(txt);
                    tr.Controls.Add(tc);
                    tb.Controls.Add(tr);
                    //pnlDate.Controls.Add(txt);
                    pnlDate.Controls.Add(tb);
                }
            }
        }
        public void btn_Click(object sender, EventArgs e)
        {
            Table t = (Table)Page.FindControl("pnlDate").FindControl("tb1");
            TextBox textbox;

            foreach (TableRow tr in t.Rows)
            {
                foreach (TableCell tc in tr.Cells)
                {
                    foreach (Control c in tc.Controls)
                    {
                        if (c.GetType() == typeof(TextBox))
                        {
                            textbox = (TextBox)c;
                            Response.Write("TextBox Value is:" + textbox.Text + "");
                        }
                    }
                }
            }
        }


这篇关于回发后TextBox值将丢失的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆