Je dois afficher le formulaire d'inscription et le formulaire de connexion sur la page d'accueil.
Si la validation échoue sur ces deux formes, j'ai besoin d'afficher des erreurs appropriées sur la page d'accueil. P>
mais s'il y a n'était pas d'erreur, l'utilisateur doit être redirigé vers le tableau de bord sécurisé. P>
Pour accomplir cela, j'utilise Enfant Action Code> sur la page d'accueil comme ceci: p>
Child actions are not allowed to perform redirect actions.
3 Réponses :
Vous ne devez pas utiliser les actions enfants dans ce contexte. P>
Une solution à votre problème pourrait être de Placez deux formes dans votre page une pour l'enregistrement et une pour vous connecter. Le formulaire d'inscription publie à une action d'enregistrement dans un contrôleur d'adhésion, l'action de connexion publie à une action de connexion dans le contrôleur d'adhésion. P>
Si une erreur se produit dans l'une des actions que vous pouvez: p>
Un moyen de faire cela consiste à utiliser Ajax formulaires pour connaître les bits de connexion et d'enregistrement et, au lieu de retourner un redirectressulte lorsque la soumission est valide, renvoyez un peu de script côté client qui surveillera et à utiliser Faites une redirection pour vous.
Voici un exemple simplifié. p>
Contrôleur: P>
@model MvcApplication12.Models.UserDetails <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> @using (Ajax.BeginForm(new AjaxOptions() { HttpMethod = "POST", Url = Url.Action("Register", "Home"), OnSuccess = "checkForRedirect(data)", UpdateTargetId = "RegistrationArea", InsertionMode = InsertionMode.Replace })) { @Html.LabelFor(m => m.UserName) @Html.EditorFor(m => m.UserName) @Html.ValidationMessageFor(m => m.UserName) @Html.LabelFor(m => m.Password) @Html.EditorFor(m => m.Password) @Html.ValidationMessageFor(m => m.Password) <input type="submit" /> }
sans utiliser JavaScript pour rediriger: strong>
Si vous mettez des formes à l'intérieur de vos vues de votre enfant, parfois si vous spécifiez le nom de l'action et le nom du contrôleur dans BeginForm Helper (Inside Child View), ce problème ne se produit pas. Par exemple, j'ai changé de vue de l'action enfant comme ceci: Avant: p> après: p> [HttpPost]
public ActionResult Login(LoginVM model, string submitValue)
{
if (submitValue == "login")
{
//Do Something
}
...
}
[HttpPost]
public ActionResult Register(RegisterVM model, string submitValue)
{
if (submitValue == "register")
{
//Do Something
}
...
}