2017-01-21 2 views
-1

Ich habe folgende Modelle:Wert darf nicht null Parametername sein: Quelle auch IEnumerable, wenn nicht null

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; } 
} 

Ich möchte jeden Schüler & Arbeitgeber jeweils mehrere workexperiences zu haben. So kann ein Student eine beliebige Anzahl von Erfahrungen haben & sogar Arbeitgeber kann eine beliebige Nummer haben. Das Problem, das ich gegenüberstelle, ist in Sicht, wo, wenn es am Arbeitserfahrungscode ankommt, es sagt:

Wert kann nicht null sein. Parametername: Quelle

Ich bin jedoch alle Werte im Blick immer nach

Nach einer IEnumerable von Modellstudenten vorbei ist die Ansicht Code

@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> 
    } 
} 

Und hier ist der Controller-Code:

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); 

auch würde Ich mag Sie den Arbeitgeber Blick sagen, funktioniert & ist die Ansicht mit demselben Code. Sind die Beziehungen nicht richtig definiert? oder etwas anderes?

+0

Welche Codezeile, die Ausnahme auslöst? –

+0

Ihr Code enthält aus Ihrer Sicht Syntaxfehler. Das '@' Symbol in Ihren if Anweisungen muss folgendermaßen lauten: '@if (...)' not 'if (@ ...)' – CodingYoshi

+0

@CodingYoshi, Es ist kein Syntaxfehler und es muss 'if sein (...) '-' @if (...) 'würde eine Ausnahme auslösen (das' @ 'vor' Student' ist einfach sinnlos) –

Antwort

0

in Ihrem Code sucht, ist hier ein vereinfachtes Beispiel des Flusses:

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> 
    ... 
} 

das Problem? Wenn die WorkExperiences Auflistung null ist, dann rufen Sie .Count() in der letzten if-Anweisung auf, ohne zuvor eine Nullprüfung durchzuführen.

Ich nehme an, dass diese letzte if Aussage einige schlechte Überbleibsel ist, dass man einfach so entfernen sollte, dass Ihr fließen wie dies zu:

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

Danke, aber jetzt funktioniert der Code Ich verstehe immer noch nicht, was es funktioniert hat, weil es derselbe Code wie vorher war. Das einzige, was mir aufgefallen ist, war während des Debuggens in der Ansicht, wenn der erste Schlüsselwert, den Sie in der Sammlung erhalten, null ist, dann wird er geworfen, auch wenn Sie nicht auf den Wert an diesem Punkt in der Schleife zugreifen. Aber jetzt werde ich meine Schleife vereinfachen, damit sie ordentlich aussieht. – user359460

Verwandte Themen