C# 下拉列表值重置

C# 下拉列表值重置,c#,asp.net,drop-down-menu,C#,Asp.net,Drop Down Menu,我用一组值填充了一个DropDownList。单击某个值时,DropDownList值应保持该值,但大多数情况下会重置为默认值选择类型 以下是DDL: <asp:TemplateField HeaderText="Criteria Type:" SortExpression="CriteriaType"> <EditItemTemplate> <asp:DropDownL

我用一组值填充了一个DropDownList。单击某个值时,DropDownList值应保持该值,但大多数情况下会重置为默认值选择类型

以下是DDL:

            <asp:TemplateField HeaderText="Criteria Type:" SortExpression="CriteriaType">
                <EditItemTemplate>
                    <asp:DropDownList ID="CriteriaType" AutoPostBack="True" runat="server" SelectedValue='<%# Bind("CriteriaType") %>'>
                        <asp:ListItem Value="0">Select a Type</asp:ListItem>
                        <asp:ListItem Value="TMEL Table">TMEL Table</asp:ListItem>
                        <asp:ListItem Value="Risk Matrix">Risk Matrix</asp:ListItem>
                        <asp:ListItem Value="Alarm Rationalization">Alarm Rationalization</asp:ListItem>
                    </asp:DropDownList>
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:DropDownList ID="CriteriaType" AutoPostBack="True" runat="server" ViewStateMode="Enabled"
                        SelectedValue='<%# Bind("CriteriaType") %>'>
                        <asp:ListItem Value="0">Select a Type</asp:ListItem>
                        <asp:ListItem Value="TMEL Table">TMEL Table</asp:ListItem>
                        <asp:ListItem Value="Risk Matrix">Risk Matrix</asp:ListItem>
                        <asp:ListItem Value="Alarm Rationalization">Alarm Rationalization</asp:ListItem>
                    </asp:DropDownList>
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("CriteriaType") %>'></asp:Label></ItemTemplate>
            </asp:TemplateField>

如果没有回发,请确保添加检查

   protected void Page_Load(object sender, EventArgs e)
{
       if(!IsPostBack)
       {
        DropDownList criteriaType = (DropDownList)DetailsView1.FindControl("CriteriaType");
        if (criteriaType.SelectedValue == "TMEL Table")
        {
            DetailsView1.Fields[5].Visible = true;
            DetailsView1.Fields[6].Visible = false;
            DetailsView1.Fields[7].Visible = false;

        }
        else if ((criteriaType.SelectedValue == "Risk Matrix"))
        {
            DetailsView1.Fields[5].Visible = true;
            DetailsView1.Fields[6].Visible = true;
            DetailsView1.Fields[7].Visible = true;
            DetailsView1.Fields[8].Visible = true;
        }
        else if ((criteriaType.SelectedValue == "Alarm Rationalization"))
        {
            DetailsView1.Fields[5].Visible = true;
            DetailsView1.Fields[6].Visible = true;
            DetailsView1.Fields[7].Visible = true;
            DetailsView1.Fields[8].Visible = true;
        }
        else if (criteriaType.SelectedValue == "Select a Type")
        {
            DetailsView1.Fields[5].Visible = false;
            DetailsView1.Fields[6].Visible = false;
            DetailsView1.Fields[7].Visible = false;
        }
    }
  }

您知道IsPostBack事件的工作原理和页面状态吗?基本上,当IsPostBack事件工作时,控件会刷新

每次从codebehind更新页面时,都会触发一个神奇的小Javascript,它要么通过XMLHTTTP post(我认为是XMLHTTTP post)命中服务器,要么像表单post一样,真正的硬post回击服务器。因此,当服务器看到这一点时,它会检查IsPostBack标志,这就像是一个自动字段,添加到每个ASP.net页面中

然后检查IsPostBack标志以更改事物的状态

如果在IsPostBack=true中填充列表框,则该列表框似乎不可选择。如果不使用它来填充列表框,则该值似乎一直在更改

这可能与在回发中设置所选值一样简单


HTH

DropDownList的值现在保持不变,但没有对字段的操作。当我单击任何DDL值时,应该可见的DetailsView1字段都不可见。
   protected void Page_Load(object sender, EventArgs e)
{
       if(!IsPostBack)
       {
        DropDownList criteriaType = (DropDownList)DetailsView1.FindControl("CriteriaType");
        if (criteriaType.SelectedValue == "TMEL Table")
        {
            DetailsView1.Fields[5].Visible = true;
            DetailsView1.Fields[6].Visible = false;
            DetailsView1.Fields[7].Visible = false;

        }
        else if ((criteriaType.SelectedValue == "Risk Matrix"))
        {
            DetailsView1.Fields[5].Visible = true;
            DetailsView1.Fields[6].Visible = true;
            DetailsView1.Fields[7].Visible = true;
            DetailsView1.Fields[8].Visible = true;
        }
        else if ((criteriaType.SelectedValue == "Alarm Rationalization"))
        {
            DetailsView1.Fields[5].Visible = true;
            DetailsView1.Fields[6].Visible = true;
            DetailsView1.Fields[7].Visible = true;
            DetailsView1.Fields[8].Visible = true;
        }
        else if (criteriaType.SelectedValue == "Select a Type")
        {
            DetailsView1.Fields[5].Visible = false;
            DetailsView1.Fields[6].Visible = false;
            DetailsView1.Fields[7].Visible = false;
        }
    }
  }