2009-10-23 12 views
2

Dans une petite application Web que je fais pour un usage interne, je veux que l'utilisateur puisse sélectionner l'un des fichiers de données à ouvrir. J'ai une vue fortement typée qui prend la liste des fichiers comme modèle.Plusieurs formes sur une vue dans ASP.Net MVC tout en conservant la validation

Ma version initiale avait une action Index qui contenait la liste des fichiers de données et renvoyait la vue, puis une action Créer pour créer un nouveau fichier et une action Télécharger pour télécharger un fichier existant. Toutefois, dans les deux cas, une nouvelle page entière ne contiendrait qu'une seule page pour un seul bouton et une seule zone de texte. J'ai donc ajouté deux formulaires à la vue Index, l'un pointant sur Créer, l'autre sur Télécharger, tous deux en utilisant Post verbe.

Cela fonctionne parfaitement bien, tout en conservant un bon nom d'URL - même si Create/Upload n'a pas d'interface utilisateur. Le problème est qu'à la fin de ces deux actions, je fais un return RedirectToAction ("Index"); Qui à son tour obtient les données à afficher et affiche la vue - très bien. Mais je n'ai pas de validation. Il semble que pour que les helpers ValidationSummary et ValidationMessage fonctionnent, j'ai besoin que l'action Post soit appelée comme l'action Get (Index, dans ce cas). J'ai tout changé pour avoir une action Get/Post Index, et une instruction if dans l'action Post pour voir si le bouton était Create ou Upload. Mais cela semble une solution loin d'être clunkie que celle que j'ai initialement trouvée.

L'autre option, bien sûr, est de créer des vues pour Create/Upload, chacune avec la seule zone de texte - mais je préfèrerais avoir le code clunky que l'interface utilisateur maladroite.

Y at-il quelque chose qui me manque, ou est-ce juste la façon dont le cadre de validation MVC est conçu.

+1

Vous devez accepter quelques réponses à vos questions, s'attendre à ce que les gens répondent à plus d'entre eux ... – Palantir

+1

Hmmm. Appologies pour cela. Je suis aveugle et utilise un lecteur d'écran - je croyais avoir reconnu les réponses en cliquant sur le bouton accepter. Va regarder dans cela et revenir à accepter les précédents. – Saqib

+0

Quel lecteur d'écran utilisez-vous? –

Répondre

0

Il semble que vous souhaitiez vraiment que cette application soit une page où tout se passe. Cela semble raisonnable parce que c'est très petit. Dans ce cas, je voudrais rester avec l'action que vous avez, parce que la validation fonctionne hors de la boîte.

L'autre option que vous avez est de mettre les Errormessages dans TempData dans Upload/Create et de les utiliser dans Index (en les mettant dans ModelState).

+0

Merci - Je suis d'accord, c'est probablement le moyen le plus facile d'y aller pour le moment. Il se sent un peu moins élégant que je ne le voudrais, mais il existe plusieurs autres alternatives, comme celle que vous avez recommandée, qui en valent la peine pour une application plus importante - merci. – Saqib

Questions connexes