J'utilise ce code pour appeler le contrôleur avec une action. Je veux envoyer des données depuis la balise d'entrée dans asp-route-data.
<span><label><b>Korisnik :</b></label></span> <br /> <input type="text" name="korisnik" id="korisnik" size="40" height="25" /> <br /> <br /> <span><label><b>Lozinka :</b></label></span> <br /> <input type="password" name="lozinka" id="lozinka" size="40" height="25" /> <br /> <br /> <button type="submit" title="Login" class="btnLogin" asp-controller="Members" asp-route-username=a sp-route-password="" asp-action="LoginUser">
Donc, asp-route-username devrait être la valeur de l'entrée korisnik. Est-ce possible?
3 Réponses :
Si j'ai bien compris votre question (dont je ne suis pas si sûr), je pense que la réponse à votre problème est d'utiliser la balise . Ensuite, au lieu d'appliquer les attributs
asp-route
sur la balise , appliquez-les sur la balise
:
<form asp-controller="Members" asp-action="LoginUser" asp-route-username="a" asp-route-password=""> <span><label><b>Korisnik :</b></label></span> <br /> <input type="text" name="korisnik" id="korisnik" size="40" height="25" /> <br /> <br /> <span><label><b>Lozinka :</b></label></span> <br /> <input type="password" name="lozinka" id="lozinka" size="40" height="25" /> <br /> <br /> <button type="submit" title="Login" class="btnLogin"></button> </form>
Si vous passez nom d'utilisateur
et mot de passe
en utilisant asp-route- {value}
, il affichera ces informations dans l'URL qui n'est pas recommandé.
Si vous souhaitez simplement transmettre les deux valeurs d'entrée de la vue au contrôleur, vous devez modifier l'attribut name
de l'entrée pour qu'il corresponde aux paramètres d'action. Par exemple:
Afficher:
[HttpPost] public async Task<IActionResult> LoginUser(string username,string password)
Action:
<form method="post" asp-controller="Members" asp-action="LoginUser"> <span><label><b>Korisnik :</b></label></span> <br /> <input type="text" name="username" id="korisnik" size="40" height="25" /> <br /> <br /> <span><label><b>Lozinka :</b></label></span> <br /> <input type="password" name="password" id="lozinka" size="40" height="25" /> <br /> <br /> <button type="submit" title="Login" class="btnLogin"></button> </form>
J'ai essayé ce code mais ça veut du travail. J'ai mis le point d'arrêt dans l'action du contrôleur pour la valeur que j'obtiens, mais il semble qu'il n'y arrive jamais.
J'ai réussi à le faire fonctionner mais le nom d'utilisateur et le mot de passe ont des valeurs nulles.
Faites-vous correspondre la propriété name aux paramètres d'action? Pourriez-vous mettre à jour votre code dans votre question (vue et contrôleur)?
J'ai la réponse. À la fin, j'ai utilisé IFormCollection et j'en ai tiré de la valeur.
[HttpPost] [Route("LoginUser")] public ActionResult LoginUser(IFormCollection collection) { string user = collection["korisnik"]; }
Vous pouvez faire comme ça, mais pourquoi? Le cadre fournit des fonctionnalités merveilleuses rendant le processus moins sujet aux erreurs et juste plus facile. Je parle ici de la liaison de modèle par exemple. Il me semble que vous pourriez manquer de connaissances fondamentales sur ASP.NET Core et le développement Web. Veuillez lire la documentation, en particulier la travaillant avec les formulaires Articles et liaison de modèle .