ASP.NET文本框在编辑期间设置的回发后丢失值

时间:2017-11-10 10:28:18

标签: c# asp.net

我的程序中有一个gridview,如果点击编辑,行的数据将被加载到文本框中。

这是我点击编辑后填写文本框中数据的代码

protected void GV_Parameters_RowEditing(object sender, GridViewEditEventArgs e)
{
        GV_Parameters.EditIndex = e.NewEditIndex;        
        int index = e.NewEditIndex;

        IsEditing = true;

        Label lbl_frmdate = (Label)GV_Parameters.Rows[index].FindControl("lbl_frmdate") as Label;
        Label lbl_todate = (Label)GV_Parameters.Rows[index].FindControl("lbl_todate") as Label;

        EditFromDate = lbl_frmdate.Text.ToUpper();
        lbl_frm_edit.Text = EditFromDate;       
        EditToDate = lbl_todate.Text.ToUpper();
        lbl_to_edit.Text = EditToDate;

        Label lbl = (Label)GV_Parameters.Rows[index].Cells[3].FindControl("lbl_Is_holiday");
        string is_holiday = lbl.Text;       


        Label lbl_std_intime = (Label)GV_Parameters.Rows[index].FindControl("lbl_std_intime") as Label;
        Label lbl_std_outtime = (Label)GV_Parameters.Rows[index].FindControl("lbl_std_outtime") as Label;

        string[] arr_std_intime;
        string[] arr_std_outtime;

        if (is_holiday != "1")//working day
        {
            r_work_holiday.SelectedIndex = 0;
            IsHoliday = false;

            if (lbl_std_intime.Text != "")
            {
                arr_std_intime = lbl_std_intime.Text.Split(':');

                txt_std_TimeInHours.Text = arr_std_intime[0].ToString();

                txt_std_TimeInMins.Text = arr_std_intime[1].ToString();
            }

            if (lbl_std_outtime.Text != "")
            {
                arr_std_outtime = lbl_std_outtime.Text.Split(':');                
                txt_std_TimeOutHours.Text = arr_std_outtime[0].ToString();
                               txt_std_TimeOutMins.Text = arr_std_outtime[1].ToString();
            }
        }
        else
        {
            IsHoliday = true;
            //r_workingday.Checked = false;
            //r_holiday.Checked = true;
            r_work_holiday.SelectedIndex = 1;
            Label lbl_remarks = (Label)GV_Parameters.Rows[index].FindControl("lbl_remarks") as Label;
            txt_holiday_desc.Text = lbl_remarks.Text;
        }    

        collapse_state = "expand";
}

有一个radiobutton列表显示编辑的行是假日或工作日, 如果用户更改radioButtonList中的选择,则会发生PostBack,这是所有texbox变为空白的时间。

protected void r_work_holiday_SelectedIndexChanged(object sender, EventArgs e)
{
        if(r_work_holiday.SelectedIndex==0)
        {
            IsHoliday = false;
        }
        else
        {
            IsHoliday = true;
        }

        collapse_state = "expand";
}

页面加载中没有任何方法可以清除文本框。

protected void Page_Load(object sender, EventArgs e)
{
        if (IsEditing)
        {
            collapse_state = "expand";
        }

        if (!Page.IsPostBack)           
        {
            BindYears();          
        }
}

请帮忙

更新:

回发后,

lbl_frm_editlbl_to_edit没有重置。 变量EditFromDate和EditToDate由Viewstate

设置

1 个答案:

答案 0 :(得分:0)

我曾经在ASP控件中工作过,但如果我没记错的话,文本框中的内容通常会在每个帖子中被ASP .NET清除。文本框的状态不会保存。

Here是我在研究这个问题时找到的答案。

您可以在ViewState中存储文本框的值,并将它们分配回PageLoad事件。像

这样的东西
txt_std_TimeOutHours.Text = arr_std_outtime[0].ToString();
txt_std_TimeOutMins.Text = arr_std_outtime[1].ToString();
ViewState["TimeOutHours"] = arr_std_outtime[0].ToString();
ViewState["TimeOutMins"] = arr_std_outtime[1].ToString();

在PageLoad事件中,您可以执行此操作来恢复值。

if(Page.IsPostBack)
{
   txt_std_TimeOutHours.Text = ViewState["TimeOutHours"].ToString();
   txt_std_TimeOutMins.Text = ViewState["TimeOutMins"].ToString();
}

希望这有帮助!

相关问题