在Page_PreInit中动态重新创建TextBox值取决于HiddenField的值

时间:2017-11-10 04:15:10

标签: c# asp.net dynamic textbox

我创建了一些动态控件,例如:-qmkshrobj=priority。 这些是在 function combine (obj) { var combined = {} for (let key in obj) { if (obj.hasOwnProperty(key)) { if (!!combined[key]) { combined[key] = [].concat(combined[key], obj[key].values) // everything in one // or // combined[key].push(obj[key].values) // everything in distinct arrays } else { combined[key] = obj[key].values // or // combined[key] = [obj[key].values] // in distinct arrays } } } return combined } 中创建的,是在ButtonClick之后创建的。

TextBox

然后当点击另一个按钮时,我想在ModalPopupExtender上重新创建这些控件。

protected void AddGroupBTN_Click(object sender, EventArgs e)
{
   GroupMPE.Show();//GroupMPE is a ModalPopupExtender 
   ScheduleIdHF.Value = 1; //ScheduleIdHF is a HiddenField declared in the .aspx page
   CreateControls(ScheduleIdHF.Value);
   ...
}
private void CreateControls(string ScheduleId)
{
    TableRow TR = new TableRow();
    TR.ID = "tableRow1";
    TableCell TC = new TableCell();
    TC.ID = "tableCell1;
    TextBox textBox = new TextBox();
    textBox.ID = "textBox1";
    TC.Controls.Add(textBox);
    TR.Cells.Add(TC);
    ExampleTable1.Rows.Add(TR);//ExampleTable1 is declared in the .aspx page

}

但是我希望对CreateControls的方法调用是有条件的并使用Page_PreInit ScheduleIdHF的值。问题是protected void Page_PreInit(object sender, EventArgs e) { if(IsPostBack) { if (!string.IsNullOrEmpty(ScheduleIdHF.Value)) { CreateControls(ScheduleIdHF.Value); ... 为空,并且不会在HiddenField事件之后创建。有没有人有解决这个难题的解决方案?因为我希望在回发后获得HiddenField的文本。

2 个答案:

答案 0 :(得分:2)

您可以使用以下代码轻松访问文本框/隐藏字段值。这只是使用基本的Web编程理念,即发送到服务器的任何内容都可以在Request对象中使用。

在PreInit事件中访问控制值的代码隐藏

protected void Page_PreInit(object sender, EventArgs e)
{
    if(Page.IsPostBack) {
       var x = Request[TextBox1.UniqueID];
       var y = Request[ScheduleIdHF.UniqueID];
       //use values of x and/or y to implement your logic
       if(y != null && y == "somevalue") {
          //your custom logic goes here
       }
   }
}

文本框标记

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:HiddenField ID="ScheduleIdHF" runat="server"  Value="1010"/>

答案 1 :(得分:1)

使用Session变量存储HiddenField的值,然后在PreInit事件中检索它,如:

        protected void Page_PreInit(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            string ScheduleIdHF = string.Empty;
            if (Session["ScheduleIdHF"] != null)
            {
                ScheduleIdHF = Session["ScheduleIdHF"].ToString();
                CreateControls(ScheduleIdHF);
                ...
            }
        }
    }