У меня есть флажок в сетке. При событии CheckChanged он отправляет обновления в базу данных. Он работает нормально, пока я не добавлю сообщение, чтобы спросить пользователя, хочет ли он продолжить.
Когда флажок установлен, отображается сообщение, пользователь нажимает кнопку ОК, и событие checkchanged не запускается. Однако при обновлении страницы запускается событие checkchanged.
Я пробовал много комбинаций, но ничего не работает.
Это сетка с двумя флажками:
<asp:GridView ID = "GridView1" runat = "server" AutoGenerateColumns = "false" CellSpacing = "0" GridLines = "None" PageSize = "20"
ShowStatusBar = "false" ShowFooter = "False" ShowHeader = "false" DataKeyNames = "RowType, QID"
AllowFilteringByColumn = "false" AllowPaging = "false" AllowSorting = "false" ShowGroupPanel = "false" Skin = "" Width = "100%"
CssClass = "GVResult" SelectedItemStyle-CssClass = "SelectedStyle" RenderMode = "Lightweight"
OnRowDataBound = "GV_ItemDataBound" OnRowCommand = "GV_RowCommand">
<Columns>
<asp:TemplateField Visible = "true" ItemStyle-HorizontalAlign = "Left" HeaderStyle-Width = "10%">
<ItemTemplate>
<asp:Label ID = "lblQuestionNo" Text='<%# Eval("QuestionNo") %>' runat = "Server" CssClass='<%# Eval("CSS") %>' Enabled = "False" />
<asp:HiddenField ID = "hfQID" runat = "Server" Value='<%# Eval("QID") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField Visible = "true" ItemStyle-HorizontalAlign = "Left" HeaderStyle-Width = "10%">
<ItemTemplate>
<asp:Label ID = "lblMarker1" Text='<%# Eval("Marker1") %>' runat = "Server" CssClass='<%# Eval("CSS") %>' Enabled = "true" />
<asp:CheckBox ID = "ckMarker1" Checked='<%# Eval("CheckMarker1") %>' runat = "Server" AutoPostBack = "true" OnCheckedChanged = "ckMarker_CheckedChanged" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField Visible = "true" ItemStyle-HorizontalAlign = "Left" HeaderStyle-Width = "10%">
<ItemTemplate>
<asp:Label ID = "lblMarker2" Text='<%# Eval("Marker2") %>' runat = "Server" CssClass = "Label_100_White" Enabled = "False" />
<asp:CheckBox ID = "ckMarker2" Checked='<%# Eval("CheckMarker2") %>' runat = "Server" Enabled = "true" AutoPostBack = "true" OnCheckedChanged = "ckMarker_CheckedChanged" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>Сообщения для флажков добавляются в сетку RowDataBound:
protected void GV_ItemDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row is GridViewRow & e.Row.RowType == DataControlRowType.DataRow)
{
GridViewRow Item = e.Row as GridViewRow;
CheckBox ckMarker1 = (CheckBox)e.Row.FindControl("ckMarker1");
CheckBox ckMarker2 = (CheckBox)e.Row.FindControl("ckMarker2");
ckMarker1.Attributes.Add("onclick", "javascript: var answer = confirm('Do you want to proceed with the changes');return answer;");
ckMarker2.Attributes.Add("onclick", "javascript: var answer = confirm('Do you want to proceed with the changes');return answer;"); }
}И это событие смены флажка: Вместо того, чтобы срабатывать после отображения сообщения, оно срабатывает при обновлении страниц.
protected void ckMarker_CheckedChanged(object sender, EventArgs e)
{
DTO.FinalMarkingUpdate f = new DTO.FinalMarkingUpdate();
BLL.AllocMQuestion F = new BLL.AllocMQuestion();
CheckBox ck = (CheckBox)sender;
GridViewRow Item = (GridViewRow)ck.NamingContainer;
f.OrgID = this.OrgID;
f.AssessID = this.AssessID;
f.MarkerNo = int.Parse(ck.ID.Substring(8, 1));
f.QID = int.Parse(((HiddenField)Item.FindControl("hfQID")).Value);
f.IsMarker = ck.Checked;
F.UpdateMarkerAndChecker(f);
DataSource();
}Да, gridview находится на панели обновлений



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Добавьте атрибут, как показано ниже, чтобы он работал. Он вернет true для подтверждения dialogbox ok click и вернет false для подтверждения dialogbox cancel click.
protected void GV_ItemDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row is GridViewRow & e.Row.RowType == DataControlRowType.DataRow)
{
GridViewRow Item = e.Row as GridViewRow;
CheckBox ckMarker1 = (CheckBox)e.Row.FindControl("ckMarker1");
CheckBox ckMarker2 = (CheckBox)e.Row.FindControl("ckMarker2");
ckMarker1.Attributes.Add("onclick", "if (!confirm('Do you want to proceed with the changes')) return false;");
ckMarker2.Attributes.Add("onclick", "if (!confirm('Do you want to proceed with the changes')) return false;");
}
}
Ваш
gridviewнаходится внутри какого-нибудьupdatepanel?