DropDownLists Value Resetting

本文关键字:Resetting Value DropDownLists | 更新日期: 2023-09-27 18:11:17

我有一个用一组值填充的下拉列表。当我单击一个值时,DropDownList值应该保持该值,但大多数情况下它会重置为默认值(Select a Type)。

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)
    {
        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;
        }
    }

DropDownLists Value Resetting

如果不是postback,请确保添加check

   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事件和Page状态是如何工作的吗?当IsPostBack事件工作时,控件会刷新。

每次从隐藏代码更新页面时,都会触发一个神奇的Javascript小片段,它要么通过xmlhttp post(我认为)访问服务器,要么通过真正的硬post(如表单post)返回服务器。所以当服务器看到这个时,它检查IsPostBack标志,它就像一个自动添加到每个ASP.net页面的字段。

然后检查IsPostBack标志来改变事物的状态。

如果你在IsPostBack=true中填充列表框,它将不会显示为可选择的。如果你填充你的ListBox没有它,它将显示值不断变化。

这可能像在PostBack中设置所选值一样简单。

HTH