我有一个页面,其中有四个下拉控件。根据选择,我在网格的每一行显示一个数据网格,文本框。我从每个控件上的用户那里获取输入,并在单击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;
}
答案 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;"
我希望这会有所帮助