Question

Après beaucoup de googler, stackoverflowing (?) Et un blog de lecture, je ne peux toujours pas résoudre complètement la question. Espérons que cette communauté d'experts peut venir à la rescousse!

Étant donné: Une classe de l'entreprise avec un ICollection sur le terrain (Une société peut avoir plusieurs adresses). Chaque adresse a quelques champs de chaîne simple.

Version courte:

Je veux que l'utilisateur soit en mesure d'ajouter un nombre d'adresses à la société. D'abord, je veux montrer un ensemble d'adresses textboxes puis un bouton « Ajouter une autre adresse ». Le Javascript est pas un problème, plutôt la partie mvc. Si peu claire, devrait être similair la fonctionnalité à ceci: http://www.mdelrosso.com/sheepit/index.php?lng = en_GB & s = demo3

Je dois utiliser la fonction MVC EditorForModel (), ce qui signifie que tous les besoins de configuration pour aller dans les modèles de l'éditeur.

Etat jusqu'à présent:

  • Créé ViewModel pour la page modifier la société (CompanyViewModel)
  • Ajout [UIHint ( "Adresses")] aux adresses ICollection public champ {get; ensemble; }
  • Adresses créés EditorTemplate

Dans les adresses EditorTemplate, lors de l'ajout d'une nouvelle société, le modèle est passé dans Null (pas des surprises là-bas). Comment puis-je créer l'éditeur pour l'adresse supplémentaire? J'ai essayé plusieurs incarnations de (en utilisant Razor):

@Html.EditorFor(m => new Address());

mais aint capable de quoi que ce soit produit même en travaillant à distance. (La donne exacte ci-dessus ligne l'erreur « Modèles peut être utilisé uniquement avec accès terrain, accès à la propriété, l'indice de tableau à une dimension ou expressions indexeur personnalisée à un seul paramètre. »)

Merci pour tous les pointeurs!

/ Victor

Était-ce utile?

La solution

Ceci est une lacune des API actuelles. Une façon vous pouvez le faire est d'avoir une action de l'enfant qui est responsable de la génération du formulaire d'insertion

Dans votre contrôleur:

[ChildActionOnly]
public ActionResult AddAddress() {
    return View(new Address()); // pass an instance so view works
}

Ajouter une nouvelle vue AddAddress.cshtml

@model Address
@Html.EditorForModel()

Ensuite, dans l'utilisation du modèle de l'éditeur

@Html.Action("AddAddress")
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top