I have a Gridview with buttons for removing data rows. I'm trying to implement a modal popup via jQueryUI Dialog so that after clicking "Remove Data" the user gets prompted and if they click yes, the row gets removed, if no, nothing happens. It seems that if I don't add a "return false" to the onClientClick, the row will be removed as soon as the button is clicked, regardless. If I include return false, I'm not sure how I can get the gridviewrow command to actually happen. Here are some current snippets:
In script tag:
function ShowPopup() {
$(function () {
var message = "Are you sure you want to Remove Data?";
$("#dialog").html(message);
$("#dialog").dialog(
{
title: "Data Removal Confirmation",
buttons: {
Yes: function () {
return true;
},
No: function () {
$(this).dialog('close');
}
},
modal: true
});
});
}
Dialog Div:
<div id="dialog" style="display: none">
Gridview Button:
<asp:TemplateField HeaderText="Reject">
<ItemTemplate>
<asp:Button
ID="btnRemove"
runat="server"
Text="Remove Data"
CssClass="inherited, RemoveData"
CommandName="RemoveData"
Style="white-space: normal;"
OnClientClick="javascript: ShowPopup();return false;"
CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" />
</ItemTemplate>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:TemplateField>
Codebehind:
else if (e.CommandName == "RemoveData")
{
int affected = 0;
affected = DAL.RemoveFileUploadItem((Guid)Session["UserId"], UploadId.ToString());
BindAll();
gv_PostUpload.DataSource = null;
string FileName = UploadId.ToString() + "-" + gvDashboard.DataKeys[index]["FileName"].ToString();
string mypath = Path.Combine(Global.data_directory, @"Watch"); // Server.MapPath("~/Data/Watch/");
string totalfn = Path.Combine(mypath, FileName);
if (File.Exists(totalfn))
File.Delete(totalfn);
DAL.LogActivity("Attempt removing file " + gvDashboard.DataKeys[index]["FileName"].ToString(), Utilities.GetCurrentPageFromURL(), Session["UserId"].ToString());
int affected = 0;
affected = DAL.RemoveFileUploadItem((Guid)Session["UserId"], UploadId.ToString());
if (affected != 0)
{
DAL.LogActivity(gvDashboard.DataKeys[index]["FileName"].ToString() + " removed ", Utilities.GetCurrentPageFromURL(), Session["UserId"].ToString());
}
BindAll();
gv_PostUploadZ.DataSource = null;
plnView.Visible = false;
plnViewZ.Visible = false;
plnErrorView.Visible = false;
}
Here are the modified buttons based on @albert-d-kallal's answer:
<asp:TemplateField HeaderText="Reject">
<ItemTemplate>
<asp:Button
ID="btnRemove"
runat="server"
Text="Remove Data"
CssClass="inherited, RemoveData"
CommandName="RemoveData"
CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" />
</ItemTemplate>
<ItemTemplate>
<asp:Button
ID="btnRemove2" ClientIDMode="Predictable"
runat="server"
Text="Remove Data"
CssClass="inherited, RemoveData"
Style="white-space: normal;"
OnClientClick='<%# "ShowPopUp(" + ((GridViewRow) Container).RowIndex + ");return false;" %>' />
</ItemTemplate>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:TemplateField>
After the above modification, here is what I now am seeing n browser tools when inspecting that the button:
<input type="submit" name="ctl00$mainContent$gvDashboard$ctl02$btnRemove2" value="Remove Data" onclick="ShowPopUp(0);return false;" id="ctl00_mainContent_gvDashboard_ctl02_btnRemove2" class="inherited, RemoveData" style="white-space: normal;">