Question

J'ai examiné plusieurs messages ici pour une solution. Je vais essayer une nouvelle question.

Ma formulaire:

<form method="post" action="@Url.Action("Manage")"  data-cs-ajax="true" data-cs-target="#catalogList" >

Il possède un champ complet complet et une pagination, très similaire à l'exemple OdetoFood de Scott Allen.

Il y a:

<input type="submit" value="Update" class="btn btn-default" />

Qui met à jour certains éléments filtrés à sélectionner à partir de toutes les œuvres super - et aussi:

<input type="submit" name="btnSave" id="btnSave" value="Save" class="btn btn-default" />

Ils ont tous deux frappé avec succès:

//POST: /WebCatalog/Manage/5
[HttpPost, ActionName("Manage")]
[ValidateAntiForgeryToken]
public ActionResult Manage([Bind(Include = "Id,CatalogId,CatalogColourId,CatalogSizeId,CatalogCategoryId,CatelogSupplierId,StartDate,EndDate,Active,isSubmitted")] WebCatalogViewModel model, string searchTerm = null, int page = 1)
    { ...

Ils appuient l'action du contrôleur à cause du JavaScript:

$(function () {

var ajaxFormSubmit = function () {
    var $form = $(this);

    var options = {
        url: $form.attr("action"),
        type: $form.attr("method"),
        data: $form.serialize()
    };

    $.ajax(options).done(function (data) {
        var $target = $($form.attr("data-cs-target"));
        var $newHtml = $(data);
        $target.replaceWith($newHtml);
        var options = {};
        $newHtml.effect("highlight", options, 500, doneEffect);
    });

    return false;
};

maintenant ...

Je veux définir un champ dans le modèle pour laisser le contrôleur savoir que le deuxième bouton BTNSave a été cliqué sur ... pour enregistrer l'enregistrement, bien sûr ....

soo ...

$(function () {

    $("#btnSave").click(function () {

        $("isSubmitted").val("1");
        return true;
    });

});

Et cela incendie: Avant que la page soit soumise via AJAX dans AjaxFormSUBMIT, le code JQuery Butty pour $ (# BTNSAVE ») se déclenche avec succès.

Toutefois, dans l'action du contrôleur, Issubmitd est toujours 0.

J'ai essayé:

$("isSubmitted").val(1);

J'ai essayé le formulaire comme méthode= 'Get' et toujours pas de poste - bien que, je pourrais essayer de changer la méthode avec JavaScript dans la fonction BTNSave.click JS - Je ne sais pas comment faire ça ... Je ne peux pas enregistrer une valeur dans un contrôle de formulaire, alors pourquoi pourrais-je changer la méthode de formulaire ??

J'ai essayé un $ ajax.actionlink - mais obtenez toujours une erreur de 500 IIS.

Fondamentalement, j'ai besoin d'un moyen de savoir que l'utilisateur a cliqué sur le bouton Enregistrer plutôt que le bouton de mise à jour.

Tout conseil est apprécié!

Était-ce utile?

La solution

@robert Achmann, voici ma réponse

Il semble que le sélecteur en $ («Issubmitted») est manquant, par ex.$ ("# issubmitd") pour une entrée avec une pièce d'identité isolée.

Autres conseils

Vous n'avez pas besoin d'une valeur cachée pour indiquer au contrôleur que le bouton a été cliqué.Ce que vous devez faire est de nommer les 2 boutons comme suit

<input type="submit" name="btnAction" value="Update" class="btn btn-default" />
<input type="submit" name="btnAction" value="Save" id="btnSave" class="btn btn-default" />

Comme vous pouvez le constater, ils ont le même nom, mais différentes valeurs (mise à jour VS Enregistrer).

Dans le contrôleur, ajoutez un autre paramètre appelé btnAction, qui est le nom des boutons, à l'action.

[HttpPost, ActionName("Manage")]
[ValidateAntiForgeryToken]
public ActionResult Manage(string btnAction, [Bind(Include = "Id,CatalogId,CatalogColourId,CatalogSizeId,CatalogCategoryId,CatelogSupplierId,StartDate,EndDate,Active,isSubmitted")] WebCatalogViewModel model, string searchTerm = null, int page = 1)
{
     if(btnAction.ToLower() == "save")
     {
          // The save button was clicked
     }
     else if(btnAction.ToLower() == "update")
     {
          // The update button was clicked
     }
     else
     {
          // default ...
     }
}

Fondamentalement, le paramètre genièvreOcaseTagCode obtiendra la valeur du bouton Soumettre déclencher le formulaire pour obtenir un poste.

J'espère que cette aide.

Vous pourriez avoir un champ masqué dans votre formulaire pour stocker la valeur de quel champ a été cliqué (en contrôlant cela avec les gestionnaires d'événements JQuery), et pour cela, vous pouvez rendre votre bouton Type="Button" au lieu de type="Soumettre" (Afin de soumettre votre formulaire de votre code JQuery) ou d'utiliser EventPreventDefault.

Eh bien, voici un échantillon de code qui pourrait vous aider:

    <!DOCTYPE html>
    <html>
    <head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js">
    </script>
    <script>
    $(document).ready(function(){
      $("#bt1").click(function(){
        alert(' Save button');
        $("#operation").val('save');
        $("#frm").submit();
      });

      $("#bt2").click(function(){
        alert(' Update button');
        $("#operation").val('update');
        $("#frm").submit();
      });
    });
    </script>
    </head>

    <body>
       <form id="frm">
        <div id="div1"><h2> Form buttons - What of then was clicked? </h2></div>
        <button id="bt1"> Save button </button>
        <button id="bt2"> Update button </button>
         <input type="hidden" id="operation" name="operation" value=""/>
        </form>     
        </body>
        </html>

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top