2016-07-21 19 views
-1

Ich versuche, eine Form zu POST C#C# WebApplication POST

ich einige Recherchen machen, jedoch konnte ich codiert es richtig nicht (ich bin neu in diesem Bereich).

Hier sind meine Codes;

Ansicht;

<form> 
      <div class="field-wrap"> 
       <label> 
        Email Address<span class="req">*</span> 
       </label> 
       <input type="email" id="input-username" name="Username" required autocomplete="on" /> 
      </div> 

      <div class="field-wrap"> 
      <label> 
       Password<span class="req">*</span> 
      </label> 
      <input type="password" id="input-password" name="Password" required autocomplete="on"/> 
      </div> 

      <p class="forgot"><a href="#">Forgot Password?</a></p> 

      <button class="button button-block" id="button-login">Log In</button> 

     </form> 

Steuerung;

// GET: User 
     [HttpPost] 
     public ActionResult Login() 
     { 
      string username = Session["Username"].ToString(); 
      string password = Session["Password"].ToString(); 

      Service iLocationService = new Service(); 
      var result = Service.MemberGetLogin(username, password, "127.0.0.1"); 

      ViewBag.Message = result; 

      return View(); 
     } 

Javascript;

jQuery(document).ready(function() { 
$("#button-login").click(function() { 
    $.ajax({ 
     type: "POST", 
     url: "/Controllers/UserController/login/", 
     data: $(this).serialize(), 
     dataType: "json" 
    }) 
    .done(function (result) { 
     console.log(result); 
    }) 
    .fail(function (a) { 
     console.log(a); 
    }); 
}); 

});

Was ich versuche zu tun ist POST die Eingabewerte zu chech den Benutzer. .

Vielen Dank im Voraus

Antwort

2

Schauen Sie sich diese Linie

String username = Session [ "Benutzername"] ToString();

In Ihrem Code versuchen Sie, den Benutzernamen und das Passwort aus Sitzungsvariablen zu lesen. Wer hat den Benutzernamen und das Passwort für Session festgelegt? Sie sollten diese aus dem geposteten Formular lesen und diese verwenden.

[HttpPost] 
public ActionResult Login(string userName,string password) 
{ 
    // do something with userName and password and return something 
} 

Außerdem müssen Sie sicherstellen, dass Sie das Formular serialisieren, nicht die Schaltfläche geklickt. Ich persönlich bevorzuge es, die HTML-Hilfsmethode zu verwenden, um das Formular-Tag zu generieren und den Action-Attribut-Wert des Formulars in meinem JavaScript-Code zu verwenden, anstatt die URLs fest zu codieren.

Also in meiner Rasierer Ansicht

@using(Html.BeginForm("login","User")) 
{ 
    //Your existing form inputs goes here 
    <button class="button button-block" id="button-login">Log In</button> 
} 

und im Skript

$("#button-login").click(function() { 
    $.ajax({ 
     type: "POST", 
     url: $(this).closest("form").attr("action"), 
     data: $(this).closest("form").serialize()   
    }) 
}); 

Da Sie ein AJAX-Formular tun, ich schlage vor, Sie geben eine JSON-Antwort, die Ihr Client-Code analysieren kann und mach weitere Sachen.

[HttpPost] 
public ActionResult Login(string userName,string password) 
{ 
    //if userName and password are valid 
     return Json(new { Status="success"}); 
    // else 
     return Json(new { Status="failed", Message="Invalid credentials}); 
} 

und in Ihrem getan Rückruf, sollten Sie diesen Wert überprüfen und tun die Dinge weiter zu

.done(function (result) { 
    if(result.Status==="success") 
    { 
    window.location.href="/Home/Index"; // change to wherever you want to redirect to 
    } 
    else 
    { 
    alert(result.Message); 
    }  
}) 
+1

, die und die Namen der Ihre Eingaben, Benutzername und Passwort, nicht Ihre Parameternamen übereinstimmen. Ich würde auch geben Sie von einer expliziten URL und ändern Sie die Schaltfläche zu einem Eingabe-Typ = Senden, nur damit Sie einige konsistente HTML – Fran

+1

Gehäuse von Parametername nicht übereinstimmt. Es wird immer noch funktionieren. Außerdem macht er einen Ajax-Form-Post (wo er die URL-Variable angibt.) Daher muss der Form-Action-Wert in Markup nicht angegeben werden. Aber ich ziehe es vor, das zu tun, damit ich den nächsten Formularaktionswert anstelle von hardcoding lesen kann. – Shyju

+1

ist nicht Daten: $ (this) .serialize(), im Bereich der Schaltfläche und nicht das Formular? Ich würde das Formular explizit erhalten und dieses Element serialisieren. – Fran