6
votes

ASP .NET MVC 3: Action de l'enfant et redirection

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.


0 commentaires

3 Réponses :


2
votes

Vous ne devez pas utiliser les actions enfants dans ce contexte.

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.

Si une erreur se produit dans l'une des actions que vous pouvez:

  • Affiche une page de connexion / enregistrement dédiée et utilisez les résultats du modèle / de la validation pour afficher les messages d'erreur
  • Redirection de l'URL / Action L'utilisateur venait de et montre un message d'erreur que vous placez dans TempData

0 commentaires

6
votes

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" />
}


0 commentaires

1
votes

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> xxx pré>

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
                 }  
                ...
             }


0 commentaires