2017-09-08 4 views
-2

Ich habe ein Login-Formular mit "Passwort vergessen" -Link. Auf Login übermittelt ich eine andere Aktion nenne, während auf „Passwort vergessen“ -Link ich einige andere Aktion nenne:ActionLink mit httpPost auf demselben Controller in asp.net MVC 5

@Html.ActionLink("Forgot Password", "ForgotPassword", "Login", Model , new { @onclick = "return ValidateUsername();" }) 

Was ich brauche, ist es als POST zu senden statt GET.

Was ich habe, war eine ASP.NET WebForm-Lösung, die ich fast vollständig in ASP.NET MVC konvertiert habe. Ein Ort, an dem ich LinkButton benutzte. Das ist der einzige Flaschenhals.


Edit:

Jetzt verwende ich folgende JavaScript

$("a.anchor").click(function (e) { 
    e.preventDefault(); // This will stop default behavior 
    var validate = ValidateUsername(); 
    if (validate) { 
     //alert(document.getElementById('usernameTextBox').value); 

     var str = document.getElementById('usernameTextBox').value; 
     $.ajax({ 
      type: "POST", 
      url: "http://localhost/SSOMVC/Generic/ForgotPassword", 
      data: "data", 
      dataType: "text", 
      success: function (resultData) { 
       document.getElementById("usererror").textContent = resultData; 
      }, 
      failure: function (error) { 
      } 
     }); 
    } 
}); 

@Html.ActionLink("Forgot Password", null, null, Model, new { @class = "anchor" }) 


    public class GenericController : Controller 
    { 


     [HttpPost] 
     public ActionResult ForgotPassword(string data) 
     { 
      .... 
      return Content(callResponse); 
     } 
    } 

Ich weiß nicht, warum ich immer Daten als null in der Steuerung zu bekommen.

+0

Ich glaube nicht, dass Sie das mit actionlink sogar tun können; Wenn Sie können, wird es in einer der Überladungen sein –

+0

Sie können dieses Thema lesen: https://stackoverflow.com/questions/2048778/asp-net-mvc-actionlink-and-post-method – arslanaybars

+0

Die Frage ist nicht klar 'Modell' können Sie in Modell direkt in ActionLink übergeben – umasankar

Antwort

2

ActionLink wird in MVC in Anker-Tags konvertiert. Ein Anker-Tag sendet standardmäßig eine GET-Anfrage.

Um eine Post-Anfrage zu stellen, können Sie den Ajax-Post-Call in jquery verwenden.

@Html.ActionLink("Forgot Password", "ForgotPassword", "Login", Model , new { @onclick = "return ValidateUsername();" }, new { @class="anchor"}) 

    <script type="text/javascript"> 

    $("a.anchor").click(function(e){ 
     e.preventDefault(); // This will stop default behavior 
    $.ajax({ 
     type: "POST", 
     url: "<your classname/methodname>", 
     data: <your data>, 
     dataType: "text", 
     success: function(resultData){ 
      alert("Call Complete"); 
     }, 
     failure: funciton(error){ 
} 
}); 
    });  

</script> 
+0

Wollte Ajax/Jquery-Code vermeiden –

+1

Dies ist der einzige Weg Bruder. MVC muss den zugrunde liegenden Technologien folgen. Wenn Anchorlinks standardmäßig Post senden, würde dies die Regeln verletzen. –

+0

Danke Dheeraj. –