Affichage de la liste de modèle ASP.Net MVC vue
Voici mon modèle:
public class ViewInvoice
{
public string ClientLocation { get; set; }
public List<DetailsGroup> Details { get; set; }
public class DetailsGroup
{
public List<string> Product { get; set; }
public List<string> ProductSize { get; set; }
public List<string> PackageType { get; set; }
public List<DateTime> OrderDate { get; set; }
public List<DateTime> DeliveryDate { get; set; }
public List<int> OrderNumber { get; set; }
public List<decimal> Price { get; set; }
public List<int> ItemQuantity { get; set; }
}
}
J'essaie d'afficher ce modèle dans un tableau à l'intérieur de mon rasoir vue. Ici, c'est que code:
@using MyModel.MyTools.Orders.SumOrder
@model SumOrder
@{
ViewBag.Title = "View Invoice";
}
<h2>View Invoice</h2>
<table>
@foreach(var prod in Model.OCI)
{
<tr>
<td>
@prod.ClientLocation
</td>
</tr>
foreach (var orderItem in prod.Details)
{
<tr>
<td>
@orderItem.Product
</td>
<td>
@orderItem.ItemQuantity
</td>
</tr>
}
}
</table>
La première ligne dans le tableau affiche correctement, ce qui est le nom d'une ville, mais dans la rangée suivante, je reçois ceci:
Système.Les Collections.Génériques.Liste1[System.String] System.Collections.Generic.List
1[Système.Int32]
Quelqu'un peut m'expliquer pourquoi je ne peux pas obtenir la liste renvoyée dans un format lisible, et comment corriger ce problème?
Voici le code que j'ai utilisé pour un groupe de la liste pour le ViewInvoice modèle:
//group the cartItems according to location
List<ViewInvoice> ordersGrouped = cartItems.GroupBy(c => new
{c.ClientLocation})
.OrderBy(c => c.Key.ClientLocation).Select(s =>
new ViewInvoice()
{
ClientLocation = s.Key.ClientLocation,
Details = new List<ViewInvoice.DetailsGroup>()
{
new ViewInvoice.DetailsGroup()
{
Product = s.Select(p => p.Product).ToList(),
ItemQuantity = s.Select(p => p.ItemQuantity).ToList(),
DeliveryDate = s.Select(p => p.DeliveryDate).ToList(),
OrderDate = s.Select(p => p.OrderDate).ToList(),
OrderNumber = s.Select(p => p.OrderNumber).ToList(),
PackageType = s.Select(p => p.PackageType).ToList(),
Price = s.Select(p => p.Price).ToList(),
ProductSize = s.Select(p => p.ProductSize).ToList()
}
}
}).ToList();
- votre question n'est pas claire. Pouvez-vous nous montrer le contrôleur? Étant donné que Modèle.BEC est une liste de ViewInvoice, cela devrait fonctionner correctement. Merci de nous montrer le message d'erreur.
Vous devez vous connecter pour publier un commentaire.
Ok, j'ai enfin résolu mon problème. Au départ, j'ai plus pensé au problème. J'ai simplifié mon modèle, et ajouté un peu de logique simple à mon avis.
Ici est le Modèle mis à jour:
la mise à jour du code utilisé pour le groupe de la liste pour le Modèle:
et la mise à jour de la vue:
Cette solution clairement me permet d'itérer sur le modèle de la reproduction d'un nécessaire des lignes ou des cellules le long du chemin. Joué à la roulette russe pour les deux derniers jours sur ce problème. Espérons que cela permet de gagner du temps pour d'autres personnes confrontées à ce problème.
Votre modèle objet n'a pas de sens. Pourquoi chacun de vos propriétés, telles que le Prix et la Quantité d'une collection? Une seule ligne de commande objet aura qu'une seule valeur pour chacune des propriétés, n'est pas une collection. Votre facture d'objet représente déjà plusieurs Détails de l'objet, mais un seul détail de l'objet ne doit pas avoir de propriétés sous forme de listes. Supprimer la Liste des<> à partir de tous vos propriétés, et il doit le résoudre.
Parce que une Liste de chaînes de caractères n'est pas le même comme une chaîne de caractères.
Ce que vous voyez est ce que la méthode ToString() de la classe List est de retour, la valeur par défaut.
Pour obtenir les éléments de la liste de valeurs séparées par des virgules affichage utilisation:
Chaque fois que vous souhaitez imprimer quelque chose que l'objet de la méthode ToString() sera appelée.
Cette méthode ToString() définie sur la Liste<> classe ne peut pas savoir comment vous souhaitez que vos données soient affichées, de voir comment une liste peut caontain plus d'une Corde ou d'int et de Date. Vous pouvez ajouter un <p> en face de chaque valeur et un </p> après chaque valeur par exemple.
La première ligne s'affiche correctement car ClientLocation est un type simple.
Pour plus d'info sur les types simples voir les types simples