当存在未保存的更改时,防止DropDownList选择

时间:2017-01-18 20:37:39

标签: javascript c# jquery asp.net

我有一个页面,其中有四个下拉控件。根据选择,我在网格的每一行显示一个数据网格,文本框。我从每个控件上的用户那里获取输入,并在单击Save时保存到数据库。

问题:

当页面上有未保存的更改并且他们尝试更改下拉值时,我很难提醒用户,这会导致在网格上显示不同的数据集。

我有一个隐藏字段,可以在页面上发生更改时捕获

<asp:HiddenField ID="hfSaveFlag" runat="server" Value="false" ClientIDMode="Static" />

我启用了文本框更改功能,因此每次更改时,我都会将此隐藏字段标记设为true

<asp:TextBox ID="txtRating" runat="server" Text='<%# Eval("rating") %>' Width="25" 
            ValidationGroup="rating" onchange="setPendingSaveFlag()" />

function setPendingSaveFlag(ctrl) {
    $("#hfSaveFlag").val('true');
}

到目前为止这个工作正常,在文本框中更改值时,值设置为true

现在,我的下拉列表如下:

<asp:DropDownList ID="ddlRFP" Width="250" runat="server"  AutoPostBack="true" 
                  OnSelectedIndexChanged="ddlRFP_SelectedIndexChanged" />

我在

背后的代码中添加了onchange事件
ddlRFP.Attributes.Add("onchange", "verifyPendingSave(this);");

我的javascript for this onchange

function verifyPendingSave(ctrl) {
    if ($("#hfSaveFlag").val() == 'true') {
        alert('You have pending changes on the page.');
        return false;
    } else {
         __doPostback(ctrl, '');
         return true;
    }
}

我的意图是如果隐藏标志的值为true,我会显示警告,禁止回发并选择之前选择的值。当它为假时执行回发。

虽然我返回了false,但我看到了警报,但它没有停止回发。

我的其他部分永远不会postback。我看到控件ID和这部分中的实际控件,但我想因为它在gridview中,所以它可能无法找到偶数postback。我确信我错过了一些非常微不足道的事情。

else {
    alert(ctrl.id);
    var control = document.getElementById(ctrl.id);
    __doPostback(control, '');
    return true;
}

1 个答案:

答案 0 :(得分:1)

请在下面找到代码,只需从javascript删除其他部分

function verifyPendingSave(ctrl) {
            if ($("#hfSaveFlag").val() == 'true') {
                alert('You have pending changes on the page.');
                return false;
            }
                return true;
        }

你的onchange函数就像这个

一样调用了下拉列表

由于返回,__ doPostBack永远不会被击中。

onchange="if(!verifyPendingSave()) return false;" 

我希望这会有所帮助