Удаление кнопки Gridview всегда возвращает значение False

В моем кодировании [кодирование, которое я использовал и работал, когда не использовал кнопку gridview] всегда возвращает мое confirmValue как False.

Мне было интересно, почему это так. Всплывающее окно полностью игнорирует часть «Да» или «Нет» "INPUT" при запросе Continue with File Deletion?" строки кодирования. Он просто автоматически переходит прямо в мой код Vb.net со значением подтверждения как false.

Есть предложения, почему?

JavaScript

<script type = "text/javascript">

function onConfirm() {

    var confirm_value = document.createElement("INPUT");

    confirm_value.type = "hidden";

    confirm_value.name = "confirm_value";

    if (confirm("Continue with File Deletion?")) {

        confirm_value.value = "Yes";
        //alert("Yes was Selected. Article Selected Will Be Deleted!")

    } else {

        confirm_value.value = "No";
        //alert("No was Selected. Article Will Not Be Deleted.")
    }

    document.forms[0].appendChild(confirm_value);

}

</script>

Вид сетки:

<asp:TemplateField HeaderText = "Delete File"> 
   <ItemTemplate >
      <asp:button ID = "btnDelete" cssClass = "submit-btn small" Text = "Delete" CommandArgument = '<%# Eval("Value") %>' runat = "server" OnClientClick = "OnConfirm()" OnClick = "DeleteFile" />
   </ItemTemplate>
   <ItemStyle cssClass="grid_padding" />

</asp:TemplateField>

Vb.net для удаления строки / файла в строке при нажатии кнопки

Protected Sub DeleteFile(ByVal sender As Object, ByVal e As EventArgs)

    Dim confirmValue As String = Request.Form("confirm_value")

    If confirmValue = "Yes" Then
        Response.Write("<script language=""javascript"">alert('Yes was Selected. File Will Be Deleted!');</script>")
        Dim filePath As String = CType(sender, Button).CommandArgument
        File.Delete(filePath)
        Response.Redirect(Request.Url.AbsoluteUri)
    Else
        Response.Write("<script language=""javascript"">alert('No was Selected. File Will Not Be Deleted.');</script>")
    End If

End Sub

person narue1992    schedule 24.11.2015    source источник


Ответы (1)


Почему бы не сделать это так, не используя дополнительное поле формы (confirmValue):

JavaScript:

<script type = "text/javascript">
function OnConfirm() {
    if (confirm("Continue with File Deletion?")) {
        return true;
    } else {
        alert("No was Selected. Article Will Not Be Deleted.");
        return false;
    }
}
</script>

Вид сетки:

<asp:TemplateField HeaderText = "Delete File"> 
   <ItemTemplate>
      <asp:button ID = "btnDelete" cssClass = "submit-btn small" Text = "Delete" CommandArgument = '<%# Eval("Value") %>'
          runat = "server" OnClientClick = "return OnConfirm();" OnClick = "DeleteFile" />
   </ItemTemplate>
   <ItemStyle cssClass="grid_padding" />
</asp:TemplateField>

Обратите внимание на return в OnClientClick="return OnConfirm();"

Код позади:

Protected Sub DeleteFile(ByVal sender As Object, ByVal e As EventArgs)
    Dim filePath As String = CType(sender, Button).CommandArgument
    File.Delete(filePath)
    Page.ClientScript.RegisterStartupScript(Me.GetType(), "DeleteMessage",
       "<script type='text/javascript'>alert('Yes was selected. File was deleted!');
       document.location.href='" + Request.Url.AbsoluteUri + "'; </script>")
End Sub

Кроме того, если вы вызываете код изнутри UpdatePanel, тогда вместо ClientScript вам нужно использовать ScriptManager

ScriptManager.RegisterStartupScript(Me, [GetType](), "DeleteMessage",
    "<script type='text/javascript'>alert('Yes was selected. File was deleted!');
    document.location.href='" + Request.Url.AbsoluteUri + "'; </script>", False)
person haraman    schedule 25.11.2015
comment
Теперь ваше кодирование заставляет его работать; однако он отменяет возможность выбора пользователем Да или Нет. Я добавил часть возврата в свой код javascript, чтобы внести изменения. - person narue1992; 01.12.2015
comment
Просто добавив return true и false в мой код javascript, я все еще вынужден использовать свой confirmValue = Request.Form. Есть ли способ добавить это в вашу версию кодирования ?? - person narue1992; 01.12.2015
comment
Неважно, я нашел способ это сделать. Я изменил OnClientClick = "if (!confirm('Are you sure?')) return false;" - person narue1992; 01.12.2015
comment
Он делает, но не дает возможности пользователю сказать «нет». - person narue1992; 01.12.2015
comment
если я сделаю type="submit", ничего не изменится. кодировка не дает возможности остановить удаление. - person narue1992; 01.12.2015
comment
Я добавил недостающий ;, но вариант «Нет» по-прежнему не отображается. - person narue1992; 01.12.2015
comment
@ narue1992 В тестированном выше коде в одном из моих существующих проектов была обнаружена небольшая опечатка (OnConfirm, заглавная O, javascript с учетом регистра!), и после исправления все работает нормально. - person haraman; 01.12.2015