2009-07-27 7 views
2

Donc, je fais un assistant en tant que tel situé ici: how to make a wizard with ASP.Net MVC où chaque page a son propre div mais chaque div est vraiment situé sur la même page. Maintenant, il y a 2 problèmes ... Je suis nouveau à MVC et souhaite faire une sorte de validation avant de passer à la page suivante. La validation va d'une simple zone de texte (existe-t-il des données?) Aux données de la zone de texte dans le bon format, y a-t-il un élément dans la liste déroulante sélectionnée, y a-t-il un élément dans une liste?). Donc, il y a un large éventail de variété, y compris quelques pages auront des tableaux avec pagination/tri où l'utilisateur va sélectionner un élément de la liste et cliquez pour modifier cet élément ou en ajouter un nouveau, cela dépendra de ce que l'utilisateur fait sur la première page pour remplir le reste des pages, si nécessaire. Maintenant, je l'ai essayé:ASP.NET MVC Afficher div après validation

public ActionResult ContinueToCorr(string Number, string Rev) 
    { 

     ViewData["DivIsVisible"] = true; 
     return RedirectToAction("../Wizard/Index/1"); 
    } 

situé d'ici set div visible fasle in get method of controller mais il ne fonctionne pas pour moi.

En outre, je voudrais faire ce qui suit et j'apprécierais grandement toute aide. Avant que l'utilisateur démarre l'assistant, Id aime que l'utilisateur soit présenté avec une page de sélection (évidemment) puis après la sélection, Id comme l'adresse Web pour être quelque chose comme ceci localhost: xxxx/Wizard/'PartNumber'/'PageNumberOfWizard' Si l'utilisateur est sélectionné numéro de pièce 12345 et a démarré l'assistant, ils seront redirigés vers localhost: xxxx/Wizard/12345/1 (pour la page 1) et localhost: xxxx/Wizard/12345/2 pour la page 2 et ainsi de suite avec chaque page montrant le div suivant et cachant le précédent après validation réussie.

Enfin, j'ai essayé de jouer avec le fichier asax pour le routage afin d'obtenir ce que je voulais avant dans une adresse Web, mais c'est ce que je suis venu avec:

routes.MapRoute(
      "Wizard",            // Route name 
      "Wizard/{PartNum}/{PageId}",       // URL with parameters 
      new { controller = "Wizard", action = "Index" } // Parameter defaults 
     ); 

Il semble donc que si elle appelle toujours la méthode Index du contrôleur Wizard.

Maintenant, j'ai essayé ce qui suit dans mes Voir pages:

<% Html.BeginForm("ContinueToPage", "Wizard", FormMethod.Post); %> 
         <div class="span-87 buttons"> 
          <input type="submit" value="Continue" name="button" /> 
         </div> 
        <% Html.EndForm(); %> 

Autour de chaque bouton dans un formulaire pour appeler une nouvelle fonction spécifique pour ce bouton pour démarrer le processus de validation avant de continuer sur la page suivante et la le code serait derrière ressembler à ceci:

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult ContinueToCorr(string Number, string Rev) 
    { 
     //if (String.IsNullOrEmpty(Number)) 
     // ModelState.AddModelError("Number", "Number is required"); 
     //if (String.IsNullOrEmpty(TPSSWRevision)) 
     // ModelState.AddModelError("Rev", "Revision is required"); 
     //if (!ModelState.IsValid) 
     // return View(); 

     ViewData["DivIsVisible"] = true; 
     return RedirectToAction("../Wizard/Index/1"); 
    } 

Je ne sais pas si c'est tout à fait correct, mais je me sens comme si je tourne en rond ici. Merci beaucoup. Désolé si c'est si long mais je voulais le rendre aussi détaillé que possible. En outre, j'ai inclus ceci:

<script runat="server"> 
protected bool DivIsVisible { 
    get { 
     return ViewData["DivIsVisible"] != null && (bool)ViewData["DivIsVisible"]; 
    } 
} 
</script> 

dans la vue aussi, toujours rien.

Répondre

1

Je peux répondre à votre première question:

public ActionResult ContinueToCorr(string Number, string Rev) 
{ 
    ViewData["DivIsVisible"] = true; 
    return RedirectToAction("../Wizard/Index/1"); 
} 

Vous utilisez RedirectToAction, qui efface tous ViewData. Au lieu de cela, utilisez:

public ActionResult ContinueToCorr(string Number, string Rev) 
{ 
    ViewData["DivIsVisible"] = true; 
    return Index(1); 
} 

Je suppose que vous avez un ActionResult appelé Index qui prend un paramètre Int, dans votre contrôleur Assistant.

+0

Dans mon index() (Dans ce cas, cet index n'a pas de paramètres), j'ai juste un retour View(); appel, mais quand je fais cela, je reçois une erreur disant qu'il ne peut pas trouver ContinueToCorr.aspx dans n'importe quel endroit.Je pensais que si vous aviez un retour View() sous une fonction, il a cherché la vue qui a été nommé pour cette fonction, dans ce cas Index, non? Est-ce que je manque quelque chose? – dangerisgo

+0

Aussi ce que je passerais dans l'index avec les paramètres? – dangerisgo

+0

Pas toujours ... si vous voulez forcer la vue rendue, mettez return View ("Index"); Je ne comprends pas votre deuxième commentaire. Je pensais que vous vouliez passer un "1" dans votre action Index, à cause du routage/Wizard/Index/1 que vous avez mis là. – Francisco

Questions connexes