Devexpress AspxClientPopupControl:关闭按钮单击并更改值

Devexpress AspxClientPopupControl:关闭按钮单击并更改值,devexpress,Devexpress,我正在使用DevExpress v10。我有一个带有AspxPopupControl的ASP.NET页面。AspxPopupControl包含几个文本框aspxtbox 我需要以下功能:当用户单击AspxPopupControl弹出窗口标题中的Close按钮时,检查自弹出窗口打开以来aspxtbox字段中是否有更改。如果有,则确认“是否确实要关闭窗口而不保存?” 我打算按如下方式实现它:为AspxClientTextBox控件处理客户端事件值changed。在这样的处理程序中,我可以设置一个标志

我正在使用DevExpress v10。我有一个带有AspxPopupControl的ASP.NET页面。AspxPopupControl包含几个文本框aspxtbox

我需要以下功能:当用户单击AspxPopupControl弹出窗口标题中的Close按钮时,检查自弹出窗口打开以来aspxtbox字段中是否有更改。如果有,则确认“是否确实要关闭窗口而不保存?”

我打算按如下方式实现它:为AspxClientTextBox控件处理客户端事件值changed。在这样的处理程序中,我可以设置一个标志,然后在关闭事件的客户端处理程序(AspxClientPopupControl)中对其进行分析

但问题是:如果我在aspxtbox中更改了某些内容,然后立即单击关闭按钮,关闭事件将首先触发,而ValueChanged事件将在关闭后触发

这不允许我做我想做的事


这里有什么解决方案吗?

关闭事件作为参数接收,您可以使用该参数取消关闭事件

您可以按照以下思路做一些事情:

<dx:ASPxPopupcontrol>
    ...
    <ClientSideEvents Closing="popup_Closing" />
</dx:ASPxPopupControl>

<script type="text/javascript">

    function popup_Closing(s,e)
    {
        if (textbox1.GetText() == '' || ...) // or logic here
        {
            e.cancel = !confirm('You've empty fields. Continue anyway?');
        }
    }

</script>

...
功能弹出窗口关闭(s、e)
{
if(textbox1.GetText()=''| |…)//或此处的逻辑
{
e、 cancel=!confirm('您的字段为空,是否继续?');
}
}

是的,谢谢。您建议将控件的“初始”值与弹出窗口中的“最终”值进行比较。是的,我想过这个。但我想知道:在控件的内容更改后,是否可以立即设置一些“修改标志”?到目前为止,我还不能解决这个问题。控件已更改了ValueChanged事件,好的。但是:假设我更改了一个aspxtbox,然后立即单击Close按钮。在这种情况下,我将首先获得Closing事件,然后才会触发ValueChanged事件!这是我不能接受的。您可以在
按键
事件上设置该标志。或者可能是文本框
LostFocus
事件在弹出
关闭事件之前触发。有多种选择。您甚至可以选择另一条路线,使用“确定/取消”按钮,使弹出窗口的“关闭”按钮作为“取消”按钮工作。