Флажок не срабатывает в Gridview с сообщением javascript

У меня есть флажок в сетке. При событии 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 находится внутри какого-нибудь updatepanel?

Nagib Mahfuz 25.06.2018 09:53

Да, gridview находится на панели обновлений

Anne 26.06.2018 23:42
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
101
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Добавьте атрибут, как показано ниже, чтобы он работал. Он вернет 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;");
        }
    }

Другие вопросы по теме