【问题标题】:dropdown list - confirm - issue下拉列表 - 确认 - 问题
【发布时间】:2013-03-12 15:43:34
【问题描述】:

我的 .aspx 中有以下代码

<td>
  <script type="text/javascript" language="javascript">\
    function ShowConfirm() {
      if (confirm("Are you sure?") == true)
        return true;
      else
        return false;
    }
  </script>
  <asp:DropDownList ID="ddl1s"  runat="server"  
     onselectedindexchanged="ddl1_SelectedIndexChanged" AutoPostBack="True">
  </asp:DropDownList>
</td>

我的 aspx.cs 中有以下代码

protected void ddlEnrollmentStatus_SelectedIndexChanged(object sender, EventArgs e)
{
   ddl1.Attributes.Add("onchange", "ShowConfirm();");
}

我的下拉列表中有两个项目(是和否)

当我从列表中选择第二个项目时,我的页面会刷新,并且我会在 Page_Load 事件中设置。

我做错了什么?我正在尝试创建一个确认框,它要求用户验证他们选择的值是否是他们想要选择的值。如果他们按是,请将值更改为他们选择的 w/e。如果他们按否,则恢复为原始值。

【问题讨论】:

  • 你的代码让我头疼。当您在客户端更改它时,背后的代码应该以某种方式调用javascript ShowConfirm?
  • 对不起 Yuriy :) 此外,下面列出的代码都不起作用。 :( 我将相同的页面刷新到 page_load 状态。
  • @user1569220 如果你这么认为,那是因为你没有阅读或尝试我的回答 =) 我说的是对的,mellamokb 已经确认了。
  • 你需要学习html和javascript是如何协同工作的。它会给你一个明显的答案,为什么你正在做的事情不起作用。从那里您可以开始了解 http 的无状态特性以及 .Net 的工作原理。现在你只是在黑暗中射击飞镖。也许你会在几个小时后得到它,但你在未来的飞镖射击方面不会更好。

标签: c# javascript asp.net .net


【解决方案1】:

如果您有完全的客户端验证,最简单的方法是尽可能只在客户端代码中进行:

<asp:DropDownList ID="ddl1s"  runat="server" 
    onselectedindexchanged="ddl1_SelectedIndexChanged" 
    AutoPostBack="True" onchange="return ShowConfirm();">
</asp:DropDownList>

服务器和客户端事件的混合变得非常混乱,因为首先发生所有服务器处理,然后页面被发送到用户的浏览器,然后所有客户端事件运行(并且所有客户端上下文在每次往返到服务器)。您当前的代码是:

  1. 用户更改 DropDown 值。
  2. 往返服务器。
  3. 服务器使用onchange 发送JavaScript 代码。
  4. 什么都没有发生。 onchange 在用户实际更改值 (1) 时不存在,并且现在不会触发,因为页面是在不知道更改的情况下重新加载的。

【讨论】:

  • 我仍然遇到同样的问题(页面刷新到 page_load 状态。我应该在 aspx.cs 文件中为 ddl1_SelectedIndexChanged 事件提供什么?
  • @user1569220:如果您使用SelectedIndexChanged 事件的唯一原因是为了进行上述验证,则将其完全删除并将AutoPostBack 设置为false。这里不需要服务器往返。
  • “Microsoft JScript 运行时错误:预期对象”在 VS 中出现错误。我从 aspx/aspx.cs 中删除了 SelectedIndexChanged
【解决方案2】:

我不是 100% 确定,但我认为你需要这个:

ddl1.Attributes.Add("onchange", "return ShowConfirm();");

看看我写的“return”。

你也可以用这个来简化你的 javascript:

function ShowConfirm() {
  return confirm("Are you sure?") == true;
}

【讨论】:

  • 有些人真的很活泼。您的代码没有任何问题,除了它不是正确的答案。但是,这并不比你下面的任何其他人没有投票的人更错误=/这是一个让你保持中立的免费投票 ;-)
  • 谢谢。我真的很感激。
【解决方案3】:

你可以这样使用。

ddl1.Attributes.Add("onchange", "return ShowConfirm();");

在页面加载事件中使用它。

或将其与您的 html (.aspx) 页面绑定。

<asp:DropDownList ID="ddl1s"  runat="server" onchange="return ShowConfirm();"
 onselectedindexchanged="ddl1_SelectedIndexChanged" AutoPostBack="True">

【讨论】:

    【解决方案4】:

    AutoPostBack="True" 是错误的代码行。这会导致控件回发;但是,它在回发时不会跟踪新值,而是跟踪旧值。

    您只需要正确触发事件即可。首先将此属性设置为 False;然后确定您页面上的哪些内容负责执行 PostBack。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多