1

J'ai une vue où j'utilise une convention de nommage sur mes champs de texte, pour indiquer ce qui doit être fait avec le contenu une fois qu'il est retourné à mon contrôleur .Liaison personnalisée dans ASP.NET MVC avec des conventions de dénomination

Le format est similaire à:

<input type="text" name="RegistrationLine#ID" /> pour les mises à jour

<input type="text" name="CreateRegistrationLine#LineNumber" /> pour créer

Maintenant que je suis en utilisant ce Naming-convention, le modèle de liaison régulière est pas possible. Mais j'ai lu un peu sur le sujet et j'ai trouvé un peu d'indication qu'il serait possible d'écrire un classeur de modèle personnalisé, qui devrait être en mesure d'aider à analyser et lier ces éléments de formulaire et instancier les objets correctement.

S'il vous plaît lire: Bind formValue to property of different name, ASP.NET MVC

C'est un peu semblable à ce que je fais exception, j'ai la complexité supplémentaire d'avoir des informations en annexe dans le formElement nom que je suis en train de se lier à.

Suis-je loin de la base ici? et si non, pouvez-vous laisser tomber quelques lignes de code pour montrer comment vous démarrez ce modèle-liant off ..

Si c'est une très mauvaise approche de ce que j'essaie vraiment de réaliser, j'adorerais entendre des suggestions pour de meilleures approches. Il suffit de noter que ce que je veux être en mesure de faire est de poster les deux mises à jour et crée en une seule fois.

+1

Je dois demander "pourquoi?". Si vous avez remplacé # avec. vous pouvez tirer parti du classeur par défaut et vous épargner beaucoup de travail. – jfar

+0

Peut-être le View Model Pattern sera le chemin à parcourir dans ce cas, car l'implémentation d'un ModelBinder personnalisé n'est pas si simple, surtout si vous voulez en faire plus que simplement lier. – JOBG

+0

@jfar: C'est intéressant. Cela signifie que je ne comprends pas le classeur par défaut. – CodeMonkey

Répondre

1

Je suis plutôt d'accord avec @jfar et @omar. Je ne pense pas qu'un classeur de modèle personnalisé est où vous voulez être dans ce cas.

Vous pouvez passer un type complexe à votre vue et simplement utiliser l'arrêt complet comme @jfar mentionné.

id="Model.Person.Name.FirstName" sera heureusement lié à un objet nommé Personne qui a une classe appelée Nom qui a une propriété appelée Prénom.

Maintenant, si vous voulez faire des contrôles spéciaux sur les données, vous pouvez implémenter une classe partielle qui ferait les validations etc. et remplir les erreurs ModelState.

public partial class Name 
{ 
    public void Validate(){ } 
    public int CreateRegistrationLine(){ } 
    public bool DoSpecialActions(){ } 
} 

Il est un peu difficile de ce que vos actions spéciales font donc mon exemple ci-dessus peut ne pas être ce que vous voulez.

Questions connexes