12
votes

Paramètre du contrôleur MVC pour un élément de formulaire avec un point dedans?

Si vous utilisez le html.textboxfor () Méthodes de type, vous risquez de vous retrouver avec des commandes de formulaire qui ont des points dans leurs noms, comme celui-ci:

Si vous souhaitez que MVC puisse mapper ces champs nommés sur des paramètres de votre contrôleur (par opposition à un objet Paramètre ou autre), vous devez obtenir les noms de paramètres corrects. Que faire sur les points?

ni ceci: xxx

pas ceci: xxx

semble fonctionner.

Edit: Avoir un paramètre d'objet approprié fonctionnerait (par exemple, Voir la réponse de clictricity ), mais je cherche un moyen de le faire avec des paramètres de valeur nommés. >


0 commentaires

3 Réponses :


4
votes

Selon les autres commandes de formulaire, vous devriez pouvoir disposer du liant MPC par défaut de construire un objet de contact pour vous. Ensuite, la signature de votre méthode d'action serait la suivante: xxx

puis le contact.firstName (et tout autre fichier) sera lié correctement


4 commentaires

Merci, oui, cela fonctionnerait mais je suis intéressé si la méthode des paramètres de chaîne peut également fonctionner.


Malheureusement non. C'est l'un des problèmes de «convention sur la configuration» lorsque vous ne souhaitez pas suivre la convention. Si vous avez besoin de se lier à la valeur individuelle, écrivez un classeur de modèle personnalisé ou récupérez la valeur de la collection de formulaires.


Ah ok. Donc, ce n'est pas possible avec des paramètres de chaîne. Merci


Il se trouve qu'il y a un moyen de le faire, avec Rayattribute, voir la réponse d'Alex P.



4
votes

Comme Clicktricity suggère dans les commentaires que vous pouvez utiliser

[HttpPost]
public ActionResult FooAction(FormCollection form)
{
    firstName = form["Contact.FirstName"];
}


0 commentaires

17
votes

J'ai trouvé un autre moyen, une sorte de hack parce que je crois que c'est une mauvaise utilisation de Bindattribute , pour associer le paramètre prénom avec contact.firstName élément d'entrée: xxx

ceci pour fonctionner avec ASP .NET MVC 1.


3 commentaires

Hey, c'est intéressant. Pourquoi appelez-vous cela une mauvaise utilisation? N'est-ce pas ce que Bindattribute est pour?


Il semble que Bindattribute.prefix est destiné à donner un alias à l'instance de type complexe.


Cela fonctionne aussi sur MVC 2. J'appellerais ce "créatif" plutôt qu'un hack.