Frage

Ich habe hier mehrere Beiträge überprüft, um eine Lösung zu finden.Ich werde eine neue Frage versuchen.

mein Formular:

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

Es verfügt über ein automatisches Vervollständigungsfeld und Paging, sehr ähnlich dem OdeToFood-Beispiel von Scott Allen.

Es gibt :

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

Dadurch werden einige gefilterte Elemente auf „Ausgewählt“ aktualisiert – alles funktioniert hervorragend – und außerdem:

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

Beide haben erfolgreich getroffen:

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

Sie treffen aufgrund des Javascripts die Controller-Aktion:

$(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;
};

Jetzt...

Ich möchte im Modell ein Feld festlegen, um dem Controller mitzuteilen, dass auf die zweite BtnSave-Schaltfläche geklickt wurde ... um den Datensatz natürlich zu speichern ...

Also...

$(function () {

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

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

});

Und das feuert:Bevor die Seite über Ajax in ajaxFormSubmit übermittelt wird, wird der Schaltflächen-jQuery-Code für $(#btnSave") erfolgreich ausgelöst.

In der Controller-Aktion ist isSubmitted jedoch immer 0.

Ich habe es versucht :

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

Ich habe das Formular als method='get' ausprobiert und immer noch keinen Beitrag erhalten. Allerdings könnte ich dann versuchen, die Methode mit Javascript in der btnSave.click js-Funktion zu ändern. Ich bin mir nicht sicher, wie das geht ... wenn ich kann. Wenn ich keinen Wert in einem Formularsteuerelement speichern kann, warum sollte ich dann die Formularmethode ändern können?

Ich habe es mit $Ajax.ActionLink versucht, bekomme aber immer einen 500 IIS-Fehler.

Grundsätzlich brauche ich eine Möglichkeit zu erkennen, dass der Benutzer auf die Schaltfläche „Speichern“ und nicht auf die Schaltfläche „Aktualisieren“ geklickt hat.

Jeder Rat ist willkommen!

War es hilfreich?

Lösung

@Robert Achmann, hier ist meine Antwort

Es scheint, als erscheint der Selektor in $ ("issubmitted") fehlt, z.$ ("# Issubmitted") für einen Eingang mit einer ID-ID-ID.

Andere Tipps

Sie benötigen keinen versteckten Wert, um dem Controller mitzuteilen, auf welche Schaltfläche geklickt wurde.Sie müssen die beiden Schaltflächen wie folgt benennen

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

Wie Sie sehen, haben sie denselben Namen, aber unterschiedliche Werte (Aktualisieren vs. Speichern).

Fügen Sie im Controller einen weiteren Parameter mit dem Namen hinzu btnAction, das ist der Name der Schaltflächen, zur Aktion.

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

Im Grunde der Parameter btnAction erhält den Wert der Schaltfläche „Senden“, die das Formular auslöst, um einen Beitrag zu erhalten.

Ich hoffe das hilft.

Sie können ein verborgenes Feld in Ihrem Formular zum Speichern des Wertes von welchem Feld aufnehmen (Controlling dieses mit JQuery Event Handlers), und dafür können Sie Ihre Schaltfläche Taste="Button" anstelle von Typ="Senden" (Um Ihr Formular von Ihrem JQuery-Code einzugeben) oder können Sie EventPreventDefault verwenden.

Nun, hier ist ein Codebeispiel, das Ihnen helfen könnte:

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top