8 Stimmen

Wie kann der Wert des Buttons an den Controller weitergeleitet werden?

Ich habe eine Ansicht und sie hat zwei Schaltflächen namens 'Ja' und 'Nein'. Wenn ich auf 'Ja' klicke, wird eine Seite umgeleitet, und wenn ich auf 'Nein' klicke, wird eine andere Seite umgeleitet.

Das ist meine Ansicht.

@using (Html.BeginForm())
 { 

      Zeremonie : 

       Zeremonie am @Model.ceremony_date

              Name :

               @Model.first_name  @Model.middle_name  @Model.last_name

            @Html.Partial("_DegreeDetailsByGraduand", @Model.DegreeList)

        Sind die Informationen korrekt ?

 }

Das ist mein Controller

[HttpPost]

        public ActionResult CheckData()
        {

            return RedirectToRoute("detailform");
        }

Ich weiß nicht, wie ich den Wert der Schaltfläche im Controller erhalten kann. Wie kann ich das machen.

9voto

Mohan Punkte 1031

Geben Sie Ihren Schaltflächen einen Namen und überprüfen Sie dann den übermittelten Wert in Ihrer Controller-Methode:

<% Html.BeginForm("MeinAktionsname", "MeinController", FormMethod.Post); %>

<% Html.EndForm(); %>

public class MeinController : Controller {
    public ActionResult MeinAktionsname(string submitButton) {
        switch(submitButton) {
            case "Senden":
                // Delegieren des Sendens an eine andere Controller-Aktion

            case "Abbrechen":
                // Aufrufen einer anderen Aktion zur Durchführung der Stornierung

            default:
                // Wenn sie das Formular ohne einen submitButton übermittelt haben, 
                // geben Sie einfach die Ansicht erneut zurück.
                return(View());
        }
    }

}

Ich hoffe, das hilft:

3voto

Diego Punkte 33073

Ich gehe davon aus, dass du MVC + Razor Engine verwendest.

Mach es so:

deine 2 Buttons:

dein Formular:

@using (Html.BeginForm("Method", "Controller", FormMethod.Post, new { enctype = "multipart/form-data", id = "CreateReportForm" }))
{ 
…
}

Füge diesem JavaScript zu deinem Formular hinzu. Passe deine Aktion entsprechend an die Aktion auf dem Controller an, die umleiten wird:

    $(document).ready(function () {
        $("#buttonYes").click(function () {
            $('form#CreateReportForm').attr({ action: "Controller/Create" });
        });
        $("#buttonCancel").click(function () {
            $('form#CreateReportForm').attr({ action: " Controller /Abbrechen" });
        });
    });

2voto

Darin Dimitrov Punkte 990883

Probier es so:

[HttpPost]
public ActionResult CheckData(string btnSearch)
{
    if (btnSearch == "Yes") {
        // Der Ja-Schaltfläche wurde geklickt
    } else if (btnSearch == "No") {
        // Die Nein-Schaltfläche wurde geklickt
    }
    return RedirectToRoute("detailform");
}

Aber es ist normalerweise besser, nicht gegen den Text der Schaltfläche zu testen, sondern gegen einen vordefinierten Wert, da sich der Text ändern könnte und Ihre Controller-Aktion brechen könnte:

Ja
Nein, das möchte ich nicht tun

und dann:

[HttpPost]
public ActionResult CheckData(string btnSearch)
{
    if (btnSearch == "ja") {
        // Die Ja-Schaltfläche wurde geklickt
    } else if (btnSearch == "nein") {
        // Die Nein-Schaltfläche wurde geklickt
    }
    return RedirectToRoute("detailform");
}

Und es gibt sogar einen besseren Ansatz, bei dem Sie je nach geklickter Schaltfläche zu einer anderen Controller-Aktion weiterleiten können. Sieh dir diesen Artikel an.

Sie könnten ein Formular haben, dessen Aktion Action entspricht:

@using (Html.BeginForm("Action", "Post")) 
{

}

und dann 2 Controller-Aktionen im entsprechenden Controller haben:

public class PostController : Controller 
{
    [HttpParamAction]
    [HttpPost]
    public ActionResult SaveDraft(...) 
    {
        // ...
    }

    [HttpParamAction]
    [HttpPost]
    public ActionResult Publish(...) 
    {
        // ...
    }
}

und hier ist die Definition des benutzerdefinierten Aktionsnamen-Selektors:

public class HttpParamActionAttribute : ActionNameSelectorAttribute 
{
    public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo) 
    {
        if (actionName.Equals(methodInfo.Name, StringComparison.InvariantCultureIgnoreCase))
        {
            return true;
        }

        if (!actionName.Equals("Action", StringComparison.InvariantCultureIgnoreCase))
        {
            return false;
        }

        var request = controllerContext.RequestContext.HttpContext.Request;
        return request[methodInfo.Name] != null;
    }
}

Je nachdem, welche Schaltfläche geklickt wird, wird die entsprechende Controller-Aktion aufgerufen.

1voto

Behnam Esmaili Punkte 5705

Verwenden Sie das Attribut FormValueRequired wie folgt:

[HttpPost]
[FormValueRequired("btndegreeconfirmYes")]        
     public ActionResult CheckData()
     {
       Response.Write(submit);                    
       return RedirectToRoute("detailform");
     }

und Sie müssen Ihr Markup wie folgt ändern:

EDIT: Verwenden Sie zwei verschachtelte Formulare

    @using (Html.BeginForm())
    {
      @using (Html.BeginForm())
       {
           .
           .
           .       

       }

    }

Wenn Sie dies tun, wird das Absenden des Formulars mit dem ersten Senden-Button nur seinen eigenen Wert senden und dann können Sie ihn im FromValueRquired-Attribut verwenden.

0voto

Dije Punkte 3

Sie können einen Handler erstellen, damit Ihr Controller Ihren Beitrag gemäß dem Namen des Submit-Elements routen kann.

http://stevenbey.com/enable-multiple-submit-buttons-in-aspnet-mvc

Zum Beispiel kann ein Controller ein Submit-Element mit dem Namen "Action_Publish" wie folgt behandeln:

[HttpPost, FormAction(Prefix = "Action_")]    
public ActionResult Publish()    
{        
//...  
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X