【问题标题】:DropdownList reset to to index 0 on loadDropdownList 在加载时重置为索引 0
【发布时间】:2010-10-15 00:43:34
【问题描述】:

每次在 Firefox 中“重新加载”页面(按 F5)时,我如何将我的 asp:DropDownList 元素(具有 runat="server")重置为索引 0?

如果您建议使用 JavaScript,请注意

  • 我没有使用表单
  • 我不知道如何使用 JavaScript 访问具有 runat="server" 的元素

如果这可以使用.aspx 页面上的脚本完成,请解释一下。

【问题讨论】:

    标签: asp.net drop-down-menu reload


    【解决方案1】:

    将代码放入Page_Load 事件中以执行此操作

    protected void Page_Load(object sender, EventArgs e)
    {    
        myDropDownList.SelectedIndex =0;
    }
    

    编辑:

    响应您的 cmets,如果您已将上述逻辑放入 if 语句中以检查是否为Page.IsPostback = false,则所选索引将不会在刷新时设置回 0(执行客户端回发)。作为演示这一点的示例,这里有一个下拉列表设置为在选择时自动回发的页面

    <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>My Example</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:DropDownList ID="ddl" runat="server" AutoPostBack="true" >
            </asp:DropDownList>
        </div>
        </form>
    </body>
    </html>
    

    下面是代码

    public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Init(object sender, EventArgs e)
        {
            //Apologies for Dairy Produce inspired list
            ddl.Items.Add(new ListItem("Cheese"));
            ddl.Items.Add(new ListItem("Yoghurt"));
            ddl.Items.Add(new ListItem("Milk"));
            ddl.Items.Add(new ListItem("Butter"));
        }
    
        protected void Page_Load(object sender, EventArgs e)
        {
            //Run the Page with this in first, then comment out
            //the if statement to leave only ddl.SelectedIndex = 0;
    
            if (!Page.IsPostBack)
            {
                ddl.SelectedIndex = 0;
            }
        }
    }
    

    正如将要演示的,当页面最初运行时,刷新时,选定的索引将保留在下拉列表中;但是,当 if 语句被注释掉时,在刷新时,选定的索引设置为 0(在本例中为 Cheese)。

    【讨论】:

    • 这是我尝试的第一件事。它不起作用...... DropdownList 似乎被缓存重置为之前的选择。这不应该有所作为,但我把这个命令放在“If Page.IsPostBack = False”语句中
    • 它可以在代码隐藏文件中(首选方法)或在 aspx 标记中的脚本标记中(类似于经典 ASP)。先前索引的可能来源是 Viewstate,但它在 Pre_Load 中设置,并会被上述语句覆盖。
    • 如果你把这个放在里面 if Page.IsPostback = false ,那么这个语句只会在页面第一次加载时运行,而不是响应客户端回发,这就是刷新的意思跨度>
    【解决方案2】:

    只需将此代码添加到您的 Page_Load 事件中:

    if (myDropDown.Items.Count > 0)
    {
        myDropDown.Items[myDropDown.SelectedIndex].Selected = false;
        myDropDown.Items[0].Selected = true;
    }
    

    【讨论】:

    • 已经试过了。不起作用。如果您在 Page_load 中检查下拉列表的 SelectedIndex,它会返回 0....但是可以看到不同的索引...我认为浏览器缓存会在代码执行后重置它(我使用的是 firefox)..我假设您的意思是来自背后的代码?
    • 多年后,当接受的答案由于某种原因不起作用时,这个答案帮助了我。谢谢你。
    【解决方案3】:

    在代码 HTML 下的脚本中:

    B01 = document.getElementById('<%=me.yourID.clientid %>');
    B01.selectedIndex = 0;
    

    快乐编码^^

    【讨论】:

      【解决方案4】:

      阻止 Firefox 保留视图状态并重新填充表单:

          protected void Page_Load(object sender, EventArgs e)
          {
              if (Request.Browser.Browser == "Firefox")
                  Form.Attributes.Add("autocomplete", "off");
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多