C# ASP.NET控件回发后的类型更改

C# ASP.NET控件回发后的类型更改,c#,asp.net,textbox,postback,autopostback,C#,Asp.net,Textbox,Postback,Autopostback,当用户从另一个DropDownList(ddlTypeDemande)中选择特定值时,我需要将DropDownList(ddlGouvPick)更改为TextBox(txtGouvPick)。 下面是描述我的案例的部分代码: ASPX页 调用操作的DropDownList <td> <asp:DropDownList ID="ddlTypeDemande" runat="server" CssClass="DDDropDown" AutoP

当用户从另一个DropDownList(ddlTypeDemande)中选择特定值时,我需要将DropDownList(ddlGouvPick)更改为TextBox(txtGouvPick)。 下面是描述我的案例的部分代码:

ASPX页 调用操作的DropDownList

<td>
<asp:DropDownList 
    ID="ddlTypeDemande" 
    runat="server" 
    CssClass="DDDropDown" 
   AutoPostBack="True" OnSelectedIndexChanged="ddlTypeDemande_SelectedIndexChanged"></asp:DropDownList>
</td>

问题是当我从页面中的另一个控件调用回发时。我丢失了更改。

最简单的方法是将textbox和dropdownlist控件添加到表单中,并使用它们的
Visible
属性,如下所示:

switch (ddlTypeDemande.SelectedValue)
  {
    case "I": 

      vartxtGouv_Liv = true;
      ddlGouv_Colct.Visible = false;
      break;

case "O": 
      vartxtGouv_Liv = false;
      ddlGouv_Colct.Visible = true;

     Export(); /*Change the type of another control*/
     break;
 }

因为你通常要添加这个控件,所以你必须在oninit页面中再次添加它。如果你不放置两个控件并将其中一个设置为隐藏,viewstate将保持该可见/隐藏值。
    protected void ddlTypeDemande_SelectedIndexChanged(object sender, EventArgs e)
    {
    switch (ddlTypeDemande.SelectedValue)
      {
        case "I": 

          TextBox vartxtGouv_Liv = new TextBox();
          tdGouvLiv.Controls.Remove(ddlGouv_Colct);
          vartxtGouv_Liv.ID = "txtGouv_Liv";
          vartxtGouv_Liv.CssClass = "DDTextBox";
          vartxtGouv_Liv.Width = 200;
          tdGouvLiv.Controls.Add(vartxtGouv_Liv);
          break;

    case "O": 

         Export(); /*Change the type of another control*/
         break;
     }
  }
switch (ddlTypeDemande.SelectedValue)
  {
    case "I": 

      vartxtGouv_Liv = true;
      ddlGouv_Colct.Visible = false;
      break;

case "O": 
      vartxtGouv_Liv = false;
      ddlGouv_Colct.Visible = true;

     Export(); /*Change the type of another control*/
     break;
 }