Löschen Sie ActionLink mit dem Bestätigungsdialog

98

Ich versuche, eine einfache Methode zu implementieren ActionLink, mit der Datensätze mit ASP.NET MVC gelöscht werden. Das habe ich bisher:

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

Das Bestätigungsfeld wird jedoch nicht angezeigt. Offensichtlich fehlt mir etwas oder ich habe den Link falsch aufgebaut. Kann jemand helfen?

Cameron
quelle

Antworten:

210

Verwechseln Sie nicht routeValuesmit htmlAttributes. Sie wollen wahrscheinlich diese Überlastung :

<%= Html.ActionLink(
    "Delete", 
    "Delete", 
    new { id = item.storyId }, 
    new { onclick = "return confirm('Are you sure you wish to delete this article?');" }) 
%>
Darin Dimitrov
quelle
16
Vermeiden Sie das Löschen von Datensätzen auf GET-Anfrage! stackoverflow.com/questions/786070/…
user1068352
6
Schlechte Umsetzung. Ändern Sie nicht die Serverdaten auf GET
Dan Hunex
sicherlich sollte es sein: new {id = item.storyId, onclick = "return bestätigen ('Sind Sie sicher, dass Sie diesen Artikel löschen möchten?');" })
Ravendarksky
Wenn wir nicht mit get löschen sollen, wie geht es dann über den Aktionslink mit POST?
Unbreakable
1
Rufen Sie $ .Ajax an, wenn die Bestätigung JA lautet.
Kiquenet
15

Das sind Routen, die Sie passieren

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

Die überladene Methode, nach der Sie suchen, ist folgende:

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

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

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

Der obige Code funktioniert nur für Html.ActionLink.

Zum

Ajax.ActionLink

Verwenden Sie den folgenden Code:

<%= 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" })%>

Die Option 'Bestätigen' gibt das Bestätigungsfeld für Javascript an.

T Gupta
quelle
4

Sie können das auch anpassen, indem Sie das Löschelement zusammen mit der Nachricht übergeben. In meinem Fall mit MVC und Razor könnte ich Folgendes tun:

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

Versuche dies :

<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>
GirishBabuC
quelle
3

Mit Webgrid finden Sie es hier . Die Aktionslinks könnten wie folgt aussehen.

Geben Sie hier die Bildbeschreibung ein

    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()
                )
Hedego
quelle
1

Mit Bild und Bestätigung beim Löschen, was auf Mozilla Firefox funktioniert

<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>
GirishBabuC
quelle
1

Ich wollte das Gleiche; eine Schaltfläche zum Löschen in meiner Detailansicht. Irgendwann wurde mir klar, dass ich aus dieser Sicht posten musste:

@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?');" />
        }

Und im Controller:

 // 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
Antony D.
quelle
0

Geben Sie hier die Bildbeschreibung einMVC5 mit Löschdialog & Glyphicon. Funktioniert möglicherweise in früheren Versionen.

@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()))
Terry H.
quelle
-1

Jedes Klickereignis vor dem Meldungsfeld zum Aktualisieren / Bearbeiten / Löschen von Datensätzen warnt den Benutzer, und wenn "OK" für die Aktion fortfährt, bleibt "Abbrechen" unverändert. Für diesen Code muss kein separater Java-Skriptcode verwendet werden. Für mich geht das

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

Seeni Abirami
quelle
-2

Sie können dies auch für Html.ActionLink DeleteId versuchen

Unschuldiger Zondo
quelle
3
Können Sie diese Antwort ein wenig erklären? Stellen Sie möglicherweise ein Code-Snippet bereit, das Ihren Vorschlag demonstriert, oder beschreiben Sie, wohin dies im OP-Code gehen soll.
skrrgwasme