Excluir ActionLink com caixa de diálogo de confirmação


98

Estou tentando implementar um simples ActionLinkque excluirá registros usando ASP.NET MVC. Isso é o que eu tenho até agora:

<%= Html.ActionLink("Delete", 
                    "Delete", 
                    new { id = item.storyId, 
                          onclick = "return confirm('Are you sure?');" 
                        })%> 

No entanto, não mostra a caixa de confirmação. É claro que estou faltando alguma coisa ou construí o link incorretamente. Alguém pode ajudar?

Respostas:


211

Não confunda routeValuescom htmlAttributes. Você provavelmente quer esta sobrecarga :

<%= Html.ActionLink(
    "Delete", 
    "Delete", 
    new { id = item.storyId }, 
    new { onclick = "return confirm('Are you sure you wish to delete this article?');" }) 
%>

16
Evite deletar registros mediante solicitação GET! stackoverflow.com/questions/786070/…
user1068352

6
Implementação deficiente. Não modifique os dados do servidor em GET
Dan Hunex

certamente deveria ser: new {id = item.storyId, onclick = "return confirm ('Tem certeza de que deseja excluir este artigo?');" })
Ravendarksky

Se não devemos excluir usando get, como fazê-lo através do link Action usando POST?
Inquebrável de

1
Ligue para $ .Ajax se a confirmação for SIM?
Kiquenet de

15

essas são as rotas pelas quais você está passando

<%= Html.ActionLink("Delete", "Delete",
    new { id = item.storyId }, 
    new { onclick = "return confirm('Are you sure you wish to delete this article?');" })     %>

O método sobrecarregado que você está procurando é este:

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper,
    string linkText,
    string actionName,
    Object routeValues,
    Object htmlAttributes
)

http://msdn.microsoft.com/en-us/library/dd492124.aspx


15
<%= Html.ActionLink("Delete", "Delete",
    new { id = item.storyId }, 
    new { onclick = "return confirm('Are you sure you wish to delete this article?');" })     %>

O código acima funciona apenas para Html.ActionLink.

Para

Ajax.ActionLink

use o seguinte código:

<%= Ajax.ActionLink(" ", "deleteMeeting", new { id = Model.eventID, subid = subItem.ID, fordate = forDate, forslot = forslot }, new AjaxOptions
                                            {
                                                Confirm = "Are you sure you wish to delete?",
                                                UpdateTargetId = "Appointments",
                                                HttpMethod = "Get",
                                                InsertionMode = InsertionMode.Replace,
                                                LoadingElementId = "div_loading"
                                            }, new { @class = "DeleteApointmentsforevent" })%>

A opção 'Confirmar' especifica a caixa de confirmação de javascript.


4

Você também pode personalizar o passando o item de exclusão junto com a mensagem. No meu caso, usando MVC e Razor, então eu poderia fazer isso:

@Html.ActionLink("Delete", 
    "DeleteTag", new { id = t.IDTag }, 
    new { onclick = "return confirm('Do you really want to delete the tag " + @t.Tag + "?')" })

3

Experimente isto:

<button> @Html.ActionLink(" ", "DeletePhoto", "PhotoAndVideo", new { id = item.Id }, new { @class = "modal-link1", @OnClick = "return confirm('Are you sure you to delete this Record?');" })</button>

3

Usando o webgrid, você pode encontrá-lo aqui , os links de ação podem ter a seguinte aparência.

insira a descrição da imagem aqui

    grid.Column(header: "Action", format: (item) => new HtmlString(
                     Html.ActionLink(" ", "Details", new { Id = item.Id }, new { @class = "glyphicon glyphicon-info-sign" }).ToString() + " | " +
                     Html.ActionLink(" ", "Edit", new { Id = item.Id }, new { @class = "glyphicon glyphicon-edit" }).ToString() + " | " +
                     Html.ActionLink(" ", "Delete", new { Id = item.Id }, new { onclick = "return confirm('Are you sure you wish to delete this property?');", @class = "glyphicon glyphicon-trash" }).ToString()
                )

1

Com imagem e confirmação de exclusão, que funciona no Mozilla Firefox

<button> @Html.ActionLink(" ", "action", "controller", new { id = item.Id }, new { @class = "modal-link1", @OnClick = "return confirm('Are you sure you to delete this Record?');" })</button>
<style>
a.modal-link{ background: URL(../../../../Content/Images/Delete.png) no-repeat center;
            display: block;
            height: 15px;
            width: 15px;

        }
</style>

1

Eu queria a mesma coisa; um botão de exclusão na minha visualização Detalhes. Acabei percebendo que precisava postar a partir dessa visão:

@using (Html.BeginForm())
        {
            @Html.AntiForgeryToken()
            @Html.HiddenFor(model => model.Id)
            @Html.ActionLink("Edit", "Edit", new { id = Model.Id }, new { @class = "btn btn-primary", @style="margin-right:30px" })

            <input type="submit" value="Delete" class="btn btn-danger" onclick="return confirm('Are you sure you want to delete this record?');" />
        }

E, no Controlador:

 // this action deletes record - called from the Delete button on Details view
    [HttpPost]
    public ActionResult Details(MainPlus mainPlus)
    {
        if (mainPlus != null)
        {
            try
            {
                using (IDbConnection db = new SqlConnection(PCALConn))
                {
                    var result = db.Execute("DELETE PCAL.Main WHERE Id = @Id", new { Id = mainPlus.Id });
                }
                return RedirectToAction("Calls");
            } etc

0

insira a descrição da imagem aquiMVC5 com diálogo de exclusão e glifo. Pode funcionar em versões anteriores.

@Html.Raw(HttpUtility.HtmlDecode(@Html.ActionLink(" ", "Action", "Controller", new { id = model.id }, new { @class = "glyphicon glyphicon-trash", @OnClick = "return confirm('Are you sure you to delete this Record?');" }).ToHtmlString()))

-1

Qualquer evento de clique antes da caixa de mensagem de atualização / edição / exclusão de registros alerta o usuário e, se "Ok", prossiga para a ação, senão "cancelar" permanece inalterado. Para este código, não há necessidade de corrigir o código de java script separado. funciona para mim

<a asp-action="Delete" asp-route-ID="@Item.ArtistID" onclick = "return confirm('Are you sure you wish to remove this Artist?');">Delete</a>


-2

Você também pode tentar isso para Html.ActionLink DeleteId


3
Você pode explicar essa resposta um pouco? Talvez forneça um trecho de código que demonstre sua sugestão ou descreva onde isso deve ser inserido no código do OP?
skrrgwasme
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.