2017-01-21 3 views
-1

je les modèles suivants:valeur ne peut pas être le nom de paramètre NULL: la source même lorsque IEnumerable à ne pas nul

public class Student 
{ 
    public int Id { get; set; } 
    [Display(Name = "First Name")] 
    public string FirstName { get; set; } 
    [Display(Name = "Last Name")] 
    public string LastName { get; set; } 
    public ICollection<WorkExperience> WorkExperiences { get; set; } 
    public ICollection<Education> Educations { get; set; } 
    public ICollection<Skill> Skills { get; set; } 
} 

public class Employer 
{ 
    public int Id { get; set; } 
    [Display(Name = "First Name")] 
    public string FirstName { get; set; } 
    [Display(Name = "Last Name")] 
    public string LastName { get; set; } 
    public ICollection<WorkExperience> WorkExperiences { get; set; } 
    public ICollection<Education> Educations { get; set; } 
    public ICollection<Skill> Skills { get; set; } 
} 

public class WorkExperience 
{ 
    public int Id { get; set; } 
    [Display(Name = "Company Name")] 
    public string CompanyName { get; set; } 
    [Display(Name = "Job Title")] 
    public string JobTitle { get; set; } 
    [Display(Name = "Experience (in years)")] 
    public string Experience { get; set; } 
    [Display(Description = "Enter City, Country for e.g. San Francisco, California")] 
    public string Location { get; set; } 
    public virtual ICollection<Employer> Employers { get; set; } 
    [Display(Name = "Set as Current Company")] 
    public virtual ICollection<Student> Students { get; set; } 
} 

Je veux à chaque employeur étudiant & d'avoir plusieurs workexperiences chacun. Donc, un stuent peut avoir un certain nombre d'expériences & même l'employeur peut avoir n'importe quel nombre. Le problème auquel je suis confronté est dans la vue où quand il atteint au code de workexperience il indique:

La valeur ne peut pas être nulle. Nom du paramètre: Source

Cependant, je reçois toutes les valeurs dans la vue après le passage d'un IEnumerable du modèle étudiant

Voici le code de vue

@model IEnumerable<OpenOpportunity.Models.Student> 
@foreach (var student in Model) 
{ 
    <div class="row clearfix"> 
     <div class="col-xs-12"> 
      <h1> 
      @student.FirstName @student.LastName 
      </h1> 
     </div> 
    </div> 

    var count = 0; 
    if (@student.WorkExperiences == null) 
    { 
     <small>No current position & company set</small> 
     <a id="currentDetails" href="@Url.Action("EditCurrentDetails", "Main", new { area = "Students", id = student.Id })"> 
     <i class="fa fa-edit"></i> 
     </a> 
    } 
    else if (@student.WorkExperiences.Count() > 0) 
    { 

     foreach (var work in student.WorkExperiences) 
     { 
      if (work.IsCurrentCompany == true) 
      { 
       <small>@work.JobTitle,@work.CompanyName</small> 
       <a id="currentDetails" href="@Url.Action("EditCurrentDetails", "Main", new { area = "Students", id = student.Id })"> 
       <i class="fa fa-edit"></i> 
       </a> 
      } 
      else 
      { 
       count++; 
      } 
     } 
    } 
    if (@student.WorkExperiences.Count() == count) 
    { 
     <small>No current position & company set</small> 
     <a id="currentDetails" href="@Url.Action("EditCurrentDetails", "Main", new { area = "Students", id = student.Id })"> 
     <i class="fa fa-edit"></i> 
     </a> 
    } 
} 

Et voici le code du contrôleur:

var userID = db.Users.Find(User.Identity.GetUserId()); 
       var getStudentDetails = (from x in db.Students.Include("WorkExperiences") 
             where x.Id == userID.Student.Id 
             select x).ToList(); 
       return View(getStudentDetails); 

aussi je voudrais vous dire la vue de l'employeur fonctionne très bien & est la vue avec le même code. Les relations ne sont-elles pas correctement définies? ou autre chose?

+0

Quelle ligne de code va lancer cette exception? –

+0

Votre code a des erreurs de syntaxe dans votre vue. Le symbole '@' dans vos instructions if doit ressembler à ceci: '@if (...)' pas 'if (@ ...)' – CodingYoshi

+0

@CodingYoshi, Ce n'est pas une erreur de syntaxe et il doit être 'if (...) '-' @if (...) 'lancerait une exception (le' @ 'devant' student' est juste inutile) –

Répondre

0

En regardant votre code, voici un exemple simplifié de votre flux:

var count = 0; 
if (@student.WorkExperiences == null) 
{ 
    <small>No current position & company set</small> 
    ... 
} 
else if (@student.WorkExperiences.Count() > 0) 
{ 
    foreach (var work in student.WorkExperiences) 
    ... 
} 
if (@student.WorkExperiences.Count() == count) 
{ 
    <small>No current position & company set</small> 
    ... 
} 

Voir le problème? Si la collection WorkExperiences est null, vous appelez .Count() dans la dernière instruction if sans effectuer de vérification avant.

Je suppose que cette dernière affirmation if est une mauvaise restes que vous devez supprimer simplement pour que votre flux est comme ceci:

var count = 0; 
if (student.WorkExperiences == null || !student.WorkExperiences.Any()) 
{ 
    <small>No current position & company set</small> 
    ... 
} 
else 
{ 
    foreach (var work in student.WorkExperiences) 
    ... 
} 
+0

Merci, mais maintenant le code fonctionne je n'ai toujours pas ce qui l'a fait fonctionner parce que c'était le même code qu'avant. La seule chose que j'ai remarquée était lors du débogage à vue si la première valeur-clé que vous obtenez dans la collection est nulle alors elle sera lancée même si vous n'accédez pas à la valeur à ce point de la boucle. Mais maintenant je vais simplifier ma boucle pour qu'elle soit soignée. – user359460