7
votes

Mvc 3 ajax.actionLink with jQuery ui confirmer la boîte de dialogue

J'ai un @ ajax.actionLinkLink qui appelle une action de suppression. Maintenant, je souhaite utiliser la boîte de dialogue JQuery UI confirmer à la place l'attribut "Confirmer" régulier de la liaison AJAX. Je connecte l'événement à l'ajax.actionLink en utilisant le JavaScript discret. Mais l'action est soumise et l'e.preventdefault (); traverse une erreur. Quelqu'un peut-il me dire pourquoi cela se produit?

Voici mon code JQuery: p> xxx pré>


Voici mon code MVC: P>

    @Ajax.ActionLink("Delete", "DeleteConfirmed", new { id = item.Id },
                    new AjaxOptions
                    {
                        HttpMethod = "POST",
                        OnSuccess = "refreshList"
                    },
                    new {data_dialog_confirm="true" }
                    )


0 commentaires

6 Réponses :


0
votes

Essayez cela à la place:

$("[data-dialog-confirm]").click(function (e) {

    var theHREF = $(this).attr("href");
    $("#dialog-confirm").dialog('option', 'buttons', {
        "Delete this item": function () {
            window.location.href = theHREF;
            $(this).dialog("close");
        },
        "Cancel": function () {
            $(this).dialog("close");
        }
    });
    $("#dialog-confirm").dialog("open");

    return false
});


1 commentaires

Phil, merci pour la réponse. Je l'ai fatigué et j'ai également changé le httpport sur httpdelete. Comme il s'agit d'un ajax.actionLink, il doit exécuter l'événement JavaScript au lieu de window.location.href = thehref; Cette ligne transmet en fait la page à l'URL / Catégorie / Deleteconfirmière / 345 où 345 est l'ID de l'élément à supprimer. Savez-vous ce que le JavaScript doit être exécuté à la place de la fenêtre.Locaiton.href = thehref?



4
votes

J'ai fini par faire ceci: Modifier le ajax.actionLink code> vers html.actionLink code> et dans mon code javascript, j'appelle $. Obtenez (thehref, null, fonction () {RECOMMISTRIST () {RECOMMISTER ()}) ; code>

Voici le code: p> xxx pré>

voici le MVC 3 ActionLink P>

 @Html.ActionLink("Delete", "DeleteConfirmed", "Category", new { id = item.Id }, new
                    {
                        data_dialog_confirm = "true"
                    })


0 commentaires

13
votes

Voici comment j'ai implémenté la fonctionnalité de confirmation avec JQUERY UI:

@Html.ActionLink("Delete", "UpdateDelete", new { id = item.Id }, new { @class = "deleteLink" })


2 commentaires

Hamid merci pour la réponse. Je fais tout cela ajax basé. Donc, à l'origine, je l'avais comme @ ajax.actionLinkink et cela ne tirerait pas l'alerte. Donc j'ai changé html.actionLink et ensuite à l'intérieur de ma boîte de dialogue Fermer Fuciton de JavaScript, je fais un appel Ajax pour supprimer le disque. Tout cela fonctionne bien maintenant.


@Hamid, excellente solution, mais comment cela est censé fonctionner lorsqu'il y a un paramètre / objet à renvoyer au serveur?



0
votes

Peut-être que vous pouvez essayer d'appeler une fonction de confirmation à partir du onebegin événement d'Ajax.actionLink? De cette façon, vous pouvez continuer à utiliser l'ajax.actionLink. L'ONBEGIN est même marqué comme data-ajax-begn-begnt (code> Attribut de JQUERY AFFREZ "renvoyer votre fichierConfirmation ()" à cet attribut et ça devrait aller bien. Voici un exemple d'utilisation de Onbegin pour la confirmation de dialogue sans jquery.


0 commentaires

2
votes

vous MIGTH Utilisez la propriété onebegin code> à la place onsuccess code>, il s'agit simplement d'un exemple simple, mais cela pourrait vous aider, voici comment je déclare mon ajax.actionLink CODE> LINK:

<script>
    function confirmDeletion (e) {
        // Do something or validate inputs...
        e.preventDefault(); // This should prevent the event to fire...
    };
</script>


1 commentaires

Aucun événement n'est passé dans ConfirmDeletion pour que vous préveniez.



0
votes

J'ai trouvé qu'il était beaucoup plus facile de le faire à l'aide d'une forme séparée, contenant les données post-post et un bouton qui affiche la boîte de dialogue, puis soumet la forme.

cshtml (rasoir): P>

function ShowConfirmDlgThenSubmitForm(dialogId, formId) {
        $('#' + dialogId).dialog({
            resizable: false,
            height: 180,
            modal: true,
            buttons: {
                "Okay": function () {
                    $(this).dialog("close");
                    $('#' + formId).submit();
                },
                Cancel: function () {
                    $(this).dialog("close");                        
                }
            }
        });
        return false;
    }


0 commentaires