Domanda

Ho rivisto diversi post qui per una soluzione. Proverò una domanda fresca.

My Modum:

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

Ha un campo completo completo e il paging, molto simile all'esempio di OdetoDood da Scott Allen.

C'è:

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

Che aggiorna alcuni elementi filtrati da selezionati da - tutti i lavori grandi - e anche:

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

Entrambi hanno colpito con successo:

//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)
    { ...
.

Hanno colpito l'azione del controller a causa del 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;
};
.

Ora ...

Voglio impostare un campo nel modello per consentire al controller conosci il pulsante Secondo BtnSave, è stato cliccato ... per salvare il record, ovviamente ....

soo ...

$(function () {

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

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

});
.

E che gli incendi: prima che la pagina viene inviata tramite Ajax in AjaxFormSubmit, il codice JQuery Codice per $ (# BTNSave ") si accende con successo.

Tuttavia, nell'azione del controller, iscrittata è sempre 0.

Ho provato:

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

Ho provato il modulo come metodo= 'Get' e non è ancora post - Anche se, potrei provare a cambiare il metodo con JavaScript nella funzione BTNSave.Click JS - non è sicuro di come farlo ... se Non riesco a salvare un valore in un controllo del modulo, allora perché sarei in grado di cambiare il metodo del modulo ??

Ho provato un $ ajax.actionLink - ma ottieni sempre un errore di 500 IIS.

Fondamentalmente, ho bisogno di un modo per sapere che l'utente ha fatto clic sul pulsante Salva, anziché il pulsante Aggiorna.

Qualsiasi consiglio è apprezzato!

È stato utile?

Soluzione

@Robert Achmann, ecco la mia risposta

Sembra che il selettore in $ ("issbmitted") manca, ad es.$ ("# issinato") per un input con un ID issinato.

Altri suggerimenti

Non è necessario un valore nascosto per dire al controller quale pulsante è stato cliccato.Ciò che devi fare è nominare i 2 pulsanti come segue

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

Come puoi vedere, hanno lo stesso nome ma valori diversi (aggiornamento VS Salva).

Nel controller, aggiungere un altro parametro chiamato btnAction, che è il nome dei pulsanti, all'azione.

[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 ...
     }
}
.

Fondamentalmente, il parametro btnAction otterrà il valore del pulsante di invio attivando il modulo per ottenere post.

Spero che questo aiuto.

È possibile un campo nascosto nel modulo per memorizzare il valore di quale campo è stato cliccato (controllandolo con i gestori di eventi jquery) e per questo è possibile creare il pulsante Pulsante="Pulsante" anziché Type="Invia" (Per inviare il modulo dal tuo codice jQuery) o puoi utilizzare EventpreventDefault.

Bene, ecco un campione di codice che potrebbe aiutarti:

    <!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>
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top