web-dev-qa-db-fra.com

Comment créer la boîte de confirmation dans le contrôleur MVC?

J'ai besoin de créer la boîte de confirmation dans le contrôleur MVC?. En utilisant cette valeur "oui" ou "non", je dois exécuter l'action dans mon contrôleur. Comment on fait ça? 

Exemple de code:

    public ActionResult ActionName(passing value)
        {
             // some code 
             message box here
               if (true)
                     { true code}
              else { else code}
       }
11
user279stack1

Vous ne créez pas de boîte de confirmation dans le contrôleur, mais bien dans une vue, à l'aide de JQuery Dialog . Le contrôleur est déjà à l'intérieur du serveur, vous n'avez donc aucune intervention de l'utilisateur. Votre vue est l’endroit où l’utilisateur choisira des options, saisira des informations, cliquera sur le bouton ... Vous pourrez intercepter le clic du bouton pour afficher cette boîte de dialogue et ne soumettre le message que lorsque le bouton "Oui" get clicked . JQuery Dialog requiert les scripts (jquery.js, jquery-ui.js, jquery.ui.dialog.js) référencés sur votre page.

Exemple:

$(function(){
    $("#buttonID").click(function(event) {
        event.preventDefault();
        $('<div title="Confirm Box"></div>').dialog({
            open: function (event, ui) {
                $(this).html("Yes or No question?");
            },
            close: function () {
                $(this).remove();
            },
            resizable: false,
            height: 140,
            modal: true,
            buttons: {
                'Yes': function () {
                    $(this).dialog('close');
                    $.post('url/theValueYouWantToPass');

                },
                'No': function () {
                    $(this).dialog('close');
                    $.post('url/theOtherValueYouWantToPAss');
                }
            }
        });
    });
});
3
TiagoBrenck

Vous pouvez le faire avec ActionLink

@Html.ActionLink(
    "Delete", 
    "DeleteAction", 
    "Product", 
    new { confirm = true, other_parameter = "some_more_parameter" }, 
    new { onclick = "return confirm('Do you really want to delete this product?')" })

Si l'utilisateur confirme, le paramètre de liaison sera transmis à la méthode d'action du contrôleur.

public ActionResult DeleteAction(bool confirm, string other_parameter)
{
    // if user confirm to delete then this action will fire
    // and you can pass true value. If not, then it is already not confirmed.

    return View();
}

Mettre à jour

Vous ne pouvez pas afficher la boîte de message du côté du contrôleur. Mais vous pouvez le faire comme suit

public ActionResult ActionName(passing value)
{
     // some code 
     message box here
     if (true){ ViewBag.Status = true }
     else { ViewBag.Status = false}

     return View();
}

Et voir 

<script type="text/javascript">
function() {
    var status = '@ViewBag.Status';
    if (status) {
        alert("success");
    } else {
        alert("error");
    }
}
</script>

Mais tous ces codes ne sont pas élégants. C'est la solution de votre scenerio. 

5

Oui, vous pouvez le faire avec @Html.ActionLink comme l'a commenté AliRıza Adıyahşi.

Abonnez-vous à l'événement onclick du @Html.ActionLink

Voici la mise en œuvre:

@Html.ActionLink("Click here","ActionName","ControllerName",new { @onclick="return Submit();"})

Et en javascript, écrivez la case confirm.

<script type="text/javascript">
function Submit() {
        if (confirm("Are you sure you want to submit ?")) {
            return true;
        } else {
            return false;
        }
    }
</script>

Modifier

Essayez comme ça:

<script type="text/javascript">
    function Submit() {
            if (confirm("Are you sure you want to submit ?")) {
                document.getElementById('anchortag').href += "?isTrue=true";
            } else {
                document.getElementById('anchortag').href += "?isTrue=false";
            }
            return true;
        }
</script>

@Html.ActionLink("Submit", "Somemethod", "Home", new { @onclick = "return Submit();", id = "anchortag" })

Maintenant, dans votre contrôleur, effectuez des opérations basées sur la chaîne de requête isTrue 

public ActionResult Somemethod(bool isTrue)
        {
            if (isTrue)
            {
                //do something
            }
            else
            {
                //do something
            }
            return View();
        }
5
Karthik Chintala

Je peux confirmer que la solution d'AliRıza Adıyahşi fonctionne bien.

Vous pouvez également personnaliser le message. Dans mon cas, nous utilisons MVC et Razor, je pourrais donc faire ceci:

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

Qui a montré une boîte de dialogue avec un enregistrement spécifique nommé en elle. Il serait également possible de donner un titre à la boîte de dialogue de confirmation.

1
Maxcelcat
  <a href="@Url.Action("DeleteBlog", new {id = @post.PostId})" class="btn btn-sm btn-danger" onclick="return confirm ('Are you sure want to delete blog?');">
                                <i class="glyphicon glyphicon-remove"></i> Delete

0
sachin wankhade