【问题标题】:dropdownlist doesn't reset on page reload下拉列表不会在页面重新加载时重置
【发布时间】:2010-10-14 19:16:14
【问题描述】:

嘿,...非常简单的问题

我通常写 php,但碰巧现在用 ASP.NET 3.0 框架编程,不知道如何解决这个问题。

我有一个 DropdownList,如果我选择了某个值,...我后面的代码会做很多事情并输出数据......

现在,...如果我重新加载页面(即按 F5 或浏览器上的小重新加载)...我所有的数据都会重置,就好像我的 selectedIndex 是 0...但是实际显示的值是我选择的前一个!...我尝试在“if ispostback = false”语句后面的代码中重置索引...但没有任何效果......这就像值被缓存而我什么都没有可以改一下...

...任何帮助将不胜感激:)

(进一步解释:....如果从我的页面加载子中打印到屏幕 mydropdownlist.selectedIndex...它将返回一个 0...。但是屏幕上的选定索引显然不是 0。 ...我明白为什么会发生这种情况...我只需要停止它...或至少有一种方法可以确定视图状态下的索引...)

安德鲁

【问题讨论】:

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


    【解决方案1】:

    这是表单域的正常行为。浏览器通常会尝试记住文本字段的内容、复选框的状态以及下拉菜单中的所选项目,例如页面重新加载和后退/前进等事件。

    因此,您不应在脚本初始化期间假设表单字段的值与您在 HTML 中提供的内容相匹配。让脚本在页面加载时嗅探它们的当前值并相应地设置其变量和 DOM 状态。

    如果您真的想在重新加载/导航时丢弃所有用户表单字段更改,请在脚本初始化中调用 form.reset() 以将其返回到 HTML 状态。但这在正常情况下可能对用户非常不友好。

    【讨论】:

    • 问题是当我尝试从我的页面中的下拉列表中重试 dropdownlist.SelectedIndex 时,它认为它是 0....而不是它实际显示的内容。 ...您的意思是从 javasript 或代码后面调用 form.reset() 吗? ...(我必须使用表格吗?)
    • 来自 JavaScript。如果您从代码隐藏中访问 SelectedIndex,您将在 HTML 到达浏览器之前对其进行更改;获取 HTML 后,您无法输入浏览器的操作。
    • 哦,谢谢,很高兴知道...如果您不介意我问我该怎么做:“让脚本嗅探它们的当前值并相应地设置其变量和 DOM 状态,当页面加载。”
    • 好吧,如果您有任何具有状态的客户端 JavaScript 内容,则不应假定初始状态是您通过 HTML 提供给它的状态。如果您不使用客户端脚本,则不必担心。
    • 我的承包商正在使用母版页...因此我需要使用文档。.reset() ....但是完美运行,..谢谢
    【解决方案2】:

    听起来,当您按下 f5 时,您并没有重新加载新页面。你说当你从下拉列表中选择一些东西时,你会在后面做一堆代码。好吧,该操作是回发。因此,在该操作之后点击 f5 不会被视为对该页面的新调用,因此 if (IsPostBack == false) 将失败,因为它是回发。

    您的第一个操作导致它成为回发,因此在此之后按 f5 将成为回发。

    听起来您可能也有一些视图状态问题,因为您的其他控件正在重置。尽管如果您使用客户端脚本进行隐藏/显示,它们无论如何都不会通过视图状态持久化。

    【讨论】:

    • 嗯,没有。我知道这是旧的,但你为什么不在评论之前尝试通过调试器运行它呢?如果您点击 f5 或刷新图标,则不会被视为回发。
    • @user3302828 如果您的页面刚刚进行了回发,并且您按下了刷新按钮,它将是回发。如果您只是进行常规页面加载并进行了刷新,则不会。请阅读我的答案,因为我认为这很清楚。是的,这是旧的......
    • 无论我何时在浏览器上点击刷新(无论我是否从其他控件执行了 27 次回发都无关紧要),刷新操作永远不会注册为我的回发。您能否发布一个示例,说明按下刷新确实为您注册为回发?谢谢!
    • @user3302828 可能会问一个问题......我真的不想追求这个,因为我知道它是如何工作的,但有人可能想帮助你理解。
    • 您确定它是这样工作的吗,因为您现在可以 100% 验证在回发后完成刷新无疑是回发?因为我遇到了 OP 中提到的类似问题,我可以在通过调试器运行一个小时后告诉你,无论我在页面上做什么,我都无法看到被识别为回发的“刷新”。
    【解决方案3】:

    如果不需要,请在复选框上尝试disabling veiwstate

    【讨论】:

    • 是的,这是意料之中的。您每次都必须重新填充您的列表。
    • 是的,...但在我的特殊情况下涉及另一个数据库查询,..但这是一个很好的选择,谢谢。
    【解决方案4】:

    您是否尝试过清除浏览器中的缓存?大多数浏览器都支持 Control+F5 作为硬刷新,它将清除当前页面的缓存并从服务器重新加载整个页面。

    【讨论】:

      【解决方案5】:

      您好, 一旦选择了另一个下拉列表中的值,我也试图清除下拉列表。当用户提交表单时,应该只有一个具有值的下拉列表。 I have started the code as shown below but the drop-down will not reset itself when a value from the other drop-down is selected.我确定我遗漏了一些非常简单的东西,或者我的命名已关闭。谢谢。

      enter code
      

      `

      < form id="form1" runat="server">
      

          < /asp:DropDownList>
      

            < asp:Button ID="Button1" runat="server" Text="Submit" /></div>
      </form>
      

      使用系统;

      使用 System.Data;

      使用 System.Configuration;

      使用 System.Collections;

      使用 System.Web;

      使用 System.Web.Security;

      使用 System.Web.UI;

      使用 System.Web.UI.WebControls;

      使用 System.Web.UI.WebControls.WebParts;

      使用 System.Web.UI.HtmlControls;

      公共部分类 _homepagestate : System.Web.UI.Page

      {

      protected void Page_Load(object sender, EventArgs e)
      
      {
      
          if ( !IsPostBack )
      
          {
      
             // sel();
      
              DropDownList2.SelectedIndex = 0;
      
          }
      

      }

      protected void sel(object sender, EventArgs e)
      
      {
      
          Response.Write(DropDownList2.SelectedIndex);
      
          //DropDownList2.selecteditem = 0;
      
      }
      

      }

      '

      【讨论】:

        【解决方案6】:

        这实际上来自 parrkid 的另一个 stackoverflow 问题,但在页面末尾添加:

        <script language="javascript">
          var B01 = document.getElementById('<%=YourDropDownList.ClientID%>');
          B01.selectedIndex = 0;
        </script>
        

        是的...对于可能是 asp.net 但恕我直言的完全破解:-P

        【讨论】:

          猜你喜欢
          • 2023-03-25
          • 1970-01-01
          • 2020-07-12
          • 2013-11-01
          • 1970-01-01
          • 2016-06-26
          • 2017-01-22
          • 1970-01-01
          • 2013-03-02
          相关资源
          最近更新 更多