2014-04-24 1 views
0

J'essaie d'implémenter une vue qui affiche des informations provenant d'une base de données qui a été modifiée juste avant l'affichage. Par exemple, j'essaie d'ajouter du travail de balisage et des coûts de matériel pour donner un prix final. le problème est que je ne peux pas utiliser une boucle foreach pour l'afficher dans la vue parce que c'est un List, et j'ai du mal à le déclarer comme IEnumerable parce qu'il ne me laissera pas utiliser la fonction Add(). Voici mon modèle,Comment implémenter un modèle MVC qui ne lie pas directement à une base de données

namespace Myname.Models{ 
using System; 
using System.Collections.Generic; 

public partial class Pricing 
{ 
    public List<int> ID { get; set; } 
    public List<string> Manufac { get; set; } 
    public List<string> Model { get; set; } 
    public List<string> Service { get; set; } 
    public List<string> Type { get; set; } 
    public List<int> Price { get; set; } 

} 

Voici ma méthode d'index dans mon contrôleur,

private WTEntities db = new WTEntities(); 

    // GET: /JobInformation/ 
    [Authorize(Roles = "Employee")] 
    public ActionResult Index() 
    { 
     Pricing prices = new Pricing(); 
     prices.ID = new List<int>(); 
     prices.Manufac = new List<string>(); 
     prices.Model = new List<string>(); 
     prices.Price = new List<int>(); 
     prices.Service = new List<string>(); 

     foreach(var item in db.JobInformations) 
     { 
      prices.ID.Add(item.ID); 
      prices.Manufac.Add(item.Manufac); 
      prices.Model.Add(item.Model); 
      prices.Service.Add(item.Service); 
      prices.Price.Add(((int)item.MarkupCostCents + (int)item.LaborCostCents + (int)item.HardwareCostCents)/100); 
     } 
     return View(prices); 
    } 

et voici mon avis,

@foreach (var item in Model) 
{ 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.Type) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Manufac) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Model) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Service) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Price) 
     </td> 
    </tr> 
} 
+0

La base de données existe-t-elle déjà où 'Pricing' est défini ou que vous concevez à partir de zéro? –

+0

@Inanikian Pricing est un modèle à partir de rien, qui tire seulement certaines des valeurs d'un autre modèle de base de données. L'autre modèle énumère le coût de majoration, le coût de main d'oeuvre, etc. mais j'essaye de faire un modèle qui aura un nouveau membre appelé Price, qui est calculé à partir de ces valeurs, donc Price n'est jamais stocké dans une base de données, juste calculé à la volée – JBaczuk

Répondre

4

Vous avez conçu votre modèle de façon incorrecte pour ce vous essayez d'accomplir.

Vous devez créer un viewmodel qui ressemble à ceci:

public class Pricing 
{ 
    public int ID { get; set; } 
    public string Manufac { get; set; } 
    public string Model { get; set; } 
    public string Service { get; set; } 
    public string Type { get; set; } 
    public int Price { get; set; } 
} 

Ensuite, dans votre contrôleur:

var prices = new List<Pricing>(); 

foreach(var item in db.JobInformations) 
{ 
    var price = new Pricing(); 
    price.ID = item.ID; 
    price.Manufac = item.Manufac; 
    price.Model = item.Model; 
    price.Service = item.Service; 
    price.Price = ((int)item.MarkupCostCents + (int)item.LaborCostCents + (int)item.HardwareCostCents)/100; 

    prices.Add(price); 
} 

return View(prices); 

maintenant dans votre vue, vous pouvez faire exactement ce que vous avez déjà écrit (juste être assurez-vous de changer la déclaration @model en Liste).

+0

@Crag W. Ok, merci, cela a du sens, le seul problème est maintenant que la ligne "Prix des prix = nouvelle Liste ();" essaie de créer une liste, quand la classe de modèle n'est pas une liste, donc j'obtiens une erreur. Erreur 'Myname.Models.Pricing' ne contient pas de définition pour 'Add' et aucune méthode d'extension 'Add' acceptant un premier argument de type 'Myname.Models.Pricing' n'a été trouvée (il manque une directive using ou une référence d'assemblage? – JBaczuk

+0

le seul changement que j'ai dû faire était ** Liste ** prix = nouveau Liste (); got it, merci! – JBaczuk

+0

Oups. Je mettrai à jour le message original. en train de compiler le code. :-) –

Questions connexes