2010-08-27 2 views
0
//method declaration 
[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Step2_UpdateCart(bool? isNextStepClicked) 

//one of many of the view's fields processed by the method 
<input type="hidden" name="isNextStepClicked" value="false" /> 

Je recompose un ensemble Vue/Contrôleur dans lequel un formulaire dans la vue comporte une série d'entrées qui sont transmises via la validation. L'une des entrées est un champ caché - son nom se trouve dans la signature de la méthode - et est la seule valeur trouvée dans la signature - le reste des valeurs provient de l'objet Request. Je pensais que ce serait peut-être un cas où la méthode pourrait s'appeler récursivement avec une valeur différente de la forme transportée, mais je ne vois pas cela arriver n'importe où.Méthode du contrôleur: transmission des valeurs via POST ou signature

Est-ce que cela a un sens? (soit ma question ou mon exemple de code).

beaucoup Thanx

+0

Wha t est exactement votre problème? Pourquoi avez-vous même besoin de isNextStepClick lorsque vous le cachez et définissez sa valeur sur false? Apparemment, c'est toujours faux alors. Donc, si c'est toujours la même chose (faux), vous n'en avez pas besoin. Supposons simplement que dans l'action du contrôleur, elle est fausse. Cependant, la façon dont vous l'avez, il devrait toujours être initialisé - à faux. MAybe essayer de supprimer le point d'interrogation à côté du type de booléen ... En outre, vous pourriez vouloir expliquer votre problème plus en détail. – mare

+0

Je n'ai pas inclus le code de vue où isNextStepClicked sera déclenché à true (ou non, selon les routines de validation).Mon problème est de comprendre exactement ce que le code que j'hérite fait dans le contexte très étroit de la raison pour laquelle un seul des nombreux champs de la vue apparaît dans la signature et le reste est transmis via l'objet de requête. – justSteve

+0

On ne sait pas ce que vous demandez. Quelle est exactement votre question? – Necros

Répondre

1

Vous trouverez peut-être de son mieux pour tirer parti des modèles d'entrée ou du type FormCollection. Avec la première option, vous définissez vos propriétés, et le classeur par défaut de MVC fera de son mieux pour les mapper. Par exemple:

public ActionResult Step2_UpdateCart(UpdateCartInputModel model) 

UpdateCartInputModel peut être défini comme:

public class UpdateCartInputModel { 
    public bool? isNextStepClicked { get; set; } 
    public bool? isSomeOtherPropertyClicked { get; set; } 
} 

Avec le FormCollection, MVC traite cela comme un cas particulier et où une action accepte une instance de FormCollection il va remplir:

public ActionResult Step2_UpdateCart(FormCollection form) 

Avec un FormCollection, vous devez vous-même gérer le type de coulée/conversion.

Personnellement, je ne vois pas la nécessité d'essayer de construire une action de contrôleur récursive complexe, alors que ce dont vous avez besoin pourrait être accompli en faisant l'une des choses ci-dessus.

0

Je pense que vous demandez "d'où vient le paramètre?" et par paramètre je veux dire le bool? Paramètre de signature isNextStepClicked. Il y a trois façons d'appeler Controller ActionResult à ma connaissance.

Le premier est un appel direct d'une autre action utilisant RedirectToAction. Le suivant est comme indiqué ci-dessus - à partir du formulaire, où un contrôle est déclaré avec le même ID que votre paramètre nommé (par exemple, donne une signature d'ActionResult ViewName publique (information de chaîne) Personnellement, je trouve cela irritant car j'aime tout code avec le bon type de boîtier - mais parce que la plupart des ID de formulaire commencent par une majuscule, mes paramètres de signature le sont aussi

Troisièmement, il y a l'appel du constructeur direct. être appelé à partir du balisage en utilisant Maj + F12 (trouver tous les usages). Certains paramètres peuvent être nommés, mais pas appelé. Un contrôleur n'a pas besoin de valeurs pour chaque paramètre.

espère que cela vous aide. :-)

Questions connexes