J'ai une page MVC avec un displaytemplate. Comment puis-je obtenir l'index de l'élément actuel rendu dans la plaque d'affichage. Il produit des résultats obligatoires corrects dans les attributs de noms.
@* contact.cshtml *@ @model ...@* This is the T of the IEnumerable<T> *@ <tr> @* I NEED THE INDEX OF THE CURRENT ITERATION HERE *@ <td>@Html.DisplayFor(x => x.FirstName)</td> </tr>
3 Réponses :
J'ai peur qu'il n'y ait pas de moyen facile d'obtenir l'index. Il est enterré à l'intérieur du système interne system.web.mvc.html.defaultdisplaytemplates.collectiontemplate code> et non exposé. Ce que vous pouvez utiliser est le préfixe de champ:
@for (int i = 0; i < Model.Contacts.Length; i++)
{
@Html.DisplayFor(x => x.Contacts[i], new { Index = i })
}
Merci, je l'analyserai hors du préfixe.
@Jim, soyez prudent avec l'analyse car vous pourriez avoir des niveaux profonds tels que les contacts [5] .Addresses [7] code>.
Merci pour la pointe, je supporterai cela à l'esprit. Il y a dix ans, j'aurais passé quelques semaines à écrire l'analyseur multi-niveaux le plus flexible et le plus élégant. Aujourd'hui, je vais prendre le dernier numéro correspondant et en avoir!
@Darindimitrov, merci de me diriger vers @ ViewData.Templateinfo.htmlfieldprefix Code> - Je cherchais une solution à cela pendant plusieurs heures. Je suis d'accord avec le sentiment de Jim, une simple solution non élégante fonctionnera pour moi.
Selon la raison pour laquelle vous avez besoin de l'index, il peut y avoir un moyen plus facile.
Je faisais quelque chose de similaire et je voulais l'index juste pour pouvoir remplir facilement la liste des éléments tels que: P>
La solution peut-être évidente consistait à rendre mon modèle d'affichage en tant qu'élément de liste dans une liste de commandes et laissez le navigateur gérer l'affichage de l'index. Je faisais à l'origine cela dans une table et j'avais besoin de l'index à afficher dans la table, mais l'utilisation d'une liste ordonnée facilite beaucoup plus facilement. P>
Donc, mon point de vue des parents avait les suivants: P>
.class1 { display: inline-block; width: 150px; }
Extension de la réponse de @ Darindimitrov, je voulais soumettre une solution complète:
Etvention: P>
@using ApplicationName.Helpers @model ApplicationName.Models.ModelName <span>Item @ViewData.TemplateInfo.GetTemplateIndex()</span>