Imaginez un scénario courant, ceci est une version plus simple de ce sur quoi je tombe. J'ai en réalité plusieurs niveaux d'imbrication supplémentaires dans le mien....
Mais voici le scénario
Thème contient une liste Catégorie contient une liste Produit contient une liste
Mon contrôleur fournit un thème entièrement peuplé, avec toutes les catégories pour ce thème, les produits dans ces catégories et leurs commandes.
La collection de commandes a une propriété appelée Quantité (parmi tant d'autres) qui doit être modifiable.
@model ViewModels.MyViewModels.Theme
@Html.LabelFor(Model.Theme.name)
@foreach (var category in Model.Theme)
{
@Html.LabelFor(category.name)
@foreach(var product in theme.Products)
{
@Html.LabelFor(product.name)
@foreach(var order in product.Orders)
{
@Html.TextBoxFor(order.Quantity)
@Html.TextAreaFor(order.Note)
@Html.EditorFor(order.DateRequestedDeliveryFor)
}
}
}
Si j'utilise lambda au lieu de cela, je semble seulement obtenir une référence à l'objet Model principal, "Theme" et non à ceux dans la boucle foreach.
Est-ce que ce que j'essaie de faire est même possible ou ai-je surestimé ou mal compris ce qui est possible?
Avec ce qui précède, j'obtiens une erreur sur le TextboxFor, EditorFor, etc
CS0411: Les arguments de type pour la méthode 'System.Web.Mvc.Html.InputExtensions.TextBoxFor(System.Web.Mvc.HtmlHelper, System.Linq.Expressions.Expression>)' ne peuvent pas être déduits de l'utilisation. Essayez de spécifier explicitement les arguments de type.
Merci.
1 votes
Ne devriez-vous pas avoir
@
avant tous lesforeach
? Ne devriez-vous pas également avoir des lambdas dansHtml.EditorFor
(Html.EditorFor(m => m.Note)
, par exemple) et le reste des méthodes? Je peux me tromper, mais pouvez-vous s'il vous plaît coller votre code réel? Je suis assez nouveau dans MVC, mais vous pouvez le résoudre assez facilement avec des vues partielles, ou des éditeurs (si c'est le nom?).0 votes
category.nom
Je suis sûr que c'est unechaîne de caractères
et...For
ne prend pas en charge une chaîne de caractères en tant que premier paramètre0 votes
Oui, j'ai juste manqué les @, maintenant ajoutés. Merci. Cependant, en ce qui concerne lambda, si je commence à taper @Html.TextBoxFor(m => m. alors je ne semble obtenir qu'une référence à l'objet Model principal, pas ceux à l'intérieur de la boucle foreach.
0 votes
@DavidC - Je ne connais pas assez de MVC 3 pour répondre pour le moment - mais je soupçonne que c'est votre problème
:)
.2 votes
Je suis dans le train, mais si cela n'est pas répondu d'ici le moment où j'arrive au travail, je posterai une réponse. La réponse rapide est d'utiliser un
for()
ordinaire plutôt qu'unforeach
. Je vais expliquer pourquoi, car cela m'a aussi beaucoup troublé pendant longtemps.0 votes
Ah je comprends ce que tu veux dire, alors tu peux utiliser : LabelFor(m => m.Theme[0].nom), etc.