2011-01-03 3 views
0

Modèle ::::Création d'une liste d'objets personnalisés dans le contrôleur MVC2

public class Model1 

    { 

     public string Name { get; set; } 

     public string ProductName { get; set; } 

    } 

ViewModel ::::

public class ViewModel1 

    { 

     public List<Model1> model1; 

    } 
contrôleur

:::::::::

var sent = entities.Table1.Where<Table1>(o => o.SenderUserId == userId); 

      ViewModel1 newViewModel = new ViewModel1(); 

      foreach (Table1 gf in sent) 

      { 

       var nmodel = new Model1(); 

       nmodel.Name = gf.Name; 

       nmodel.ProductName = doSomething(gf.ProductName); 

       // **Here I'm stuck====how do I add nmodel to newViewModel** 

       //**newViewModel.Add===does not work** 

      } 

      return View(newViewModel); 
+0

Obtenez-vous une exception de référence null? Pouvez-vous être plus clair sur "ne fonctionne pas"? – Brook

+0

Je ne reçois pas 'Add' car viewModel n'a pas de méthode add. – Arnab

Répondre

1

Une estimation rapide basée sur le code que vous avez publié, c'est que vous n'avez jamais instancié la collection.

public class ViewModel1 
{ 
    List<Model1> model1; 
    public ViewModel1() 
    { 
     model1=new List<Model1>(); 
    } 
} 
...... 
newViewModel.model1.Add(nmodel); 
+0

Désolé, j'ai changé le code, c'est effectivement public Liste model1; – Arnab

+0

Oui, je vois que c'est public, vous avez encore besoin de l'instancier quelque part avant de pouvoir appeler Ajouter. J'ai ajouté la syntaxe correcte pour l'ajouter. – Brook

+0

Merci beaucoup, j'ai le sentiment que cela va fonctionner, juste une autre chose: var envoyé = entities.Table1.Where (o => o.SenderUserId == userId) me donnera parfois des valeurs nulles. – Arnab

1

Modifier votre ViewModel comme suit ViewModel ::::

public class ViewModel1 
{ 
    public List<Model1> model1 = new List<Model1>(); 
} 

Changer votre contrôleur comme suit:

var sent = entities.Table1.Where<Table1>(o => o.SenderUserId == userId); 
ViewModel1 newViewModel = new ViewModel1(); 
foreach (Table1 gf in sent) 
{ 
     var nmodel = new Model1(); 
     nmodel.Name = gf.Name; 
     nmodel.ProductName = doSomething(gf.ProductName); 
     newViewModel.model1.Add(nmodel); 
} 

return View(newViewModel); 
+0

y, c'est ce que dit Brook, bien que votre réponse sera plus claire pour les nouvelles personnes, il suffit d'ajouter '()' dans le viewmodel, merci pour votre réponse – Arnab

+0

Ajouté le ... thx – Chandu

Questions connexes