3

我有一个自动回发设置为 true 的下拉列表。我希望用户确认他们是否真的要更改该值,该值在回发时会触发服务器端事件(selectedindexchanged)。

我尝试添加一个 onchange 属性“return confirm('请单击 OK 进行更改。否则单击 CANCEL?';") 但无论确认结果如何,它都不会回发,并且如果选择取消,列表中的值不会恢复。

当我从 DropdownList 标记中删除 onchange 属性时,页面会回发。添加 onchange 属性时不会。我还需要连接事件处理程序吗(我在 C# .Net 2.0 上)。

任何线索都会有所帮助。

谢谢!

4

8 回答 8

8

您是否尝试将 onChange 事件设置为 javascript 函数,然后在函数内部显示 javascript 警报并在通过时使用 __doPostback 函数?

IE

   
drpControl.Attributes("onChange") = "DisplayConfirmation();"

function DisplayConfirmation() {
  if (confirm('Are you sure you want to do this?')) {
    __doPostback('drpControl','');
  }
}
于 2008-09-16T16:29:30.250 回答
6

您可以通过调用执行confirm() 的javascript 函数来利用CustomValidator 控件“验证”下拉菜单:

        <asp:DropDownList ID="TestDropDown" runat="server" AutoPostBack="true" CausesValidation="true"
            ValidationGroup="Group1"
            OnSelectedIndexChanged="TestDropDown_SelectedIndexChanged">
            <asp:ListItem Value="1" Text="One" />
            <asp:ListItem Value="2" Text="Two" />
        </asp:DropDownList>
       <script type="text/javascript">
            function ConfirmDropDownValueChange(source, arguments) {
                arguments.IsValid = confirm("Are you sure?");
            }
        </script>
        <asp:CustomValidator ID="ConfirmDropDownValidator" runat="server"
            ClientValidationFunction="ConfirmDropDownValueChange" Display="Dynamic" ValidationGroup="Group1"  />
于 2008-09-16T16:08:19.507 回答
6

当 DropDownList 触发部分回发时,以下工作:

// caching selected value at the time the control is clicked
MyDropDownList.Attributes.Add(
    "onclick",
    "this.currentvalue = this.value;");

// if the user chooses not to continue then restoring cached value and aborting by returning false
MyDropDownList.Attributes.Add(
    "onchange",
    "if (!confirm('Do you want to continue?')) {this.value = this.currentvalue; return false};");
于 2010-04-23T01:14:53.897 回答
1

目前,您总是返回 的结果confirm(),因此即使它返回true,您仍然会在回发触发之前停止执行事件。你onchange应该return false;只在这样做的confirm()时候,也像这样:

if (!confirm('Please click OK to change. Otherwise click CANCEL?')) return false;
于 2008-09-16T16:34:53.047 回答
1

如果您将 AutoPostBack 设置为 true,则覆盖 onchange 属性将不起作用,因为 ASP.NET 将始终将以下内容附加到 onchange 脚本的末尾:

;setTimeout('__doPostBack(\'YourDropDown\',\'\')', 0)

如果您将 AutoPostBack 设置为 false,则使用“确认和 __doPostBack”类型的脚本(见上文,err.. 下面)覆盖 onchange 将起作用,但您可能必须手动创建 __doPostBack 函数。

于 2008-09-16T16:50:59.623 回答
1
if (!confirm('Please click OK to change. Otherwise click CANCEL?')) return false;

始终返回,因此无论用户单击确定还是取消,下拉列表的 OnSelectedIndexChanged 事件都会触发。

于 2010-07-21T15:42:20.060 回答
0

确保您的活动是有线的:

dropDown.SelectedIndexChanged += new EventHandler(dropDown_SelectedIndexChanged);

您还可以应用客户端属性来返回确认。如果取消,相应地设置索引。

dropDown.Attributes.Add("onchange", "javascript: return confirm('confirmation msg')");
于 2008-09-16T15:52:53.570 回答
0
&lt;asp:DropDownList runat="server" ID="ddlShailendra"  AutoPostBack="True" OnSelectedIndexChanged="ddlShailendra_SelectedIndexChanged" onchange="javascript: { if(confirm('Click ok to prevent post back, Cancel to make a postback'))return true;} " &gt;
          &lt;asp:ListItem Text="tes" Value="1" >&lt;/asp:ListItem&gt;
            &lt;asp:ListItem Text="test" Value="-1"&gt;&lt;/asp:ListItem&gt;
            &lt;/asp:DropDownList&gt;

内联编写函数,并且对于您想要回发的条件没有“返回”。这有效并且符合标准。

于 2013-04-17T13:41:15.697 回答