2010-05-03 7 views
0

J'essaie de trouver quel serait le meilleur moyen de lier le premier élément de ISet (Iesi.Collection) en tant que premier élément.Bind ISet dans ASP.NET MVC2

Donc, fondamentalement, je ne dispose que d'utiliser une sorte de collection qui a un indexeur (et ISet ne fonctionne pas) alors je peux écrire un code comme celui-ci (qui fonctionne parfaitement bien):

<%: Html.EditorFor(x => x.Company.PrimaryUsers[0].Email) %> 

Mais comme ISet n'a pas d'indexeur je ne peux pas l'utiliser.

Alors, comment puis-je lier le premier élément de ISet dans MVC2?

Merci,
Dmitriy.

Répondre

1

Malheureusement, ces helpers fortement typés ne fonctionnent qu'avec les propriétés de l'indexeur pour les collections. Ils chercheraient en fait à ouvrir et à fermer [] parenthèses dans la syntaxe.

Une solution de contournement possible consiste à ajouter une autre propriété dans votre classe de modèle de vue qui serait de type IList et serait remplie à partir de la propriété d'origine. Dans le getter vous renverriez simplement une nouvelle liste de la propriété originale et dans le setter vous reconstruiriez l'ensemble original car il n'a pas la notion d'ordre.

+0

Vous ne parlez pas bien? Je ne veux pas modifier le modèle juste pour le plaisir ou le rendre dans la vue. Une solution nettement meilleure devrait exister. –

0

Vous pouvez retirer ceci par les éléments suivants:

<% 
    int i = 0; 
    foreach (var element in Model.Company.PrimaryUsers) { 
    string htmlFieldName = String.Format("Company.PrimaryUsers[{0}]", i); 
    %><%: Html.EditorFor(_ => element, null /* templateName */, htmlFieldName) %><% 
    i++; 
    } 
%> 

Cette surcharge particulière EditorFor() dit: « Je vais vous passer d'un modèle, mais utiliser la chaîne de htmlFieldName pour le modèle plutôt que d'essayer pour le déduire de l'expression. " Vous devez suivre le i manuellement dans ce cas.

+0

Cela ne liera pas les données publiées au modèle. –