// GET: NCR/CreateQualityRepresentative
public async Task<IActionResult> CreateQualityRepresentative()
{
NCR genNCR = new NCR();
NCRNumber createNCRNumber = new NCRNumber();
ViewData["QualityRepresentative.ProblemID"] = new SelectList(_context.Problems, "ID", "ProblemID");
//Create next NCR number logic
NCRNumber lastNCRNum = await _context.NCRNumbers
.OrderByDescending(n => n.ID)
.FirstOrDefaultAsync();
createNCRNumber.Year = DateTime.Now.Date.Year;
bool isNewYear = false;
// Logic to decide if it is a new year and the conter should be set to 0
if (lastNCRNum != null) {
if (lastNCRNum.Year != DateTime.Now.Date.Year)
{
isNewYear = true;
{
genNCR.NCRNum = createNCRNumber.GenerateNCRNumber(isNewYear);
_context.NCRNumbers.Add(createNCRNumber);
return View("Create", genNCR);
}
}
genNCR.NCRNum = createNCRNumber.GenerateNCRNumber(isNewYear);
_context.NCRNumbers.Add(createNCRNumber);
await _context.SaveChangesAsync();
return View("Create", genNCR);
}
genNCR.NCRNum = createNCRNumber.GenerateNCRNumber(isNewYear);
_context.NCRNumbers.Add(createNCRNumber);
await _context.SaveChangesAsync();
return View("Create", genNCR);
}```
Code to my controller GET method
```lang-c#
using System.ComponentModel.DataAnnotations;
namespace Haver.Models
{
public class Problem
{
public int ID { get; set; }
[Display(Name = "Problem")]
[Required(ErrorMessage = "Brief problem description is required.")]
[StringLength(255, ErrorMessage = "Problem Description is limited to 255 characters.")]
public string ProblemDescription { get; set; }
public ICollection<QualityRepresentative> QualityRepresentatives { get; set; } = new HashSet<QualityRepresentative>();
}
}
Code to my Problem model
// Foreign Key references
[Required(ErrorMessage = "You must select a Problem.")]
[Display(Name = "Problem ID")]
public int ProblemID { get; set; }
public Problem Problem { get; set; }
Small part of my QualityRepresentative code showing the foreing key
using Haver.Models;
using System.ComponentModel.DataAnnotations;
namespace Haver.ViewModels
{
public class NCR
{
public int ID { get; set; }
[Required(ErrorMessage = "NCR number is required")]
[Display(Name = "NCR number")]
public string NCRNum { get; set; }
[Display(Name = "Is engineering required?")]
public bool IsEngineerRequired { get; set; }
public string Status { get; set; }
//Hard Coded role for testing purposes ONLY
public string UserRole = "Quality Representative";
public QualityRepresentative QualityRepresentative { get; set; }
public Engineering Engineering { get; set; }
public Purchasing Purchasing { get; set; }
public Procurement Procurement { get; set; }
public Reinspection Reinspection { get; set; }
public int QualityRepresentativeID { get; set; }
public int? EngineeringID { get; set; }
public int? PurchasingID { get; set; }
public int? ProcurementID { get; set; }
public int? ReinspectionID { get; set; }
public int? PrevNCRID { get; set; }
}
}
this is the code to my ncr model
<select asp-for="QualityRepresentative.ProblemID" class="form-control" asp-items="ViewBag.ProblemID"></select>
Small extraction of my view code showing how the select is structured
So basicly what i wanted is to bind my "Problem" items into a dropdown list in my view.
My model structure is like this: NCR --> QualityRepresentative --> Problem
I already tried multiple solutions but I always get an error related to "object reference not set". Just for testing purposes i tried to bind the QualityRepresentativeID items to my view and it worked, but if I try to do it with the ProblemID items, it does not work.
Acording to your asp-items="ViewBag.ProblemID", try to change :
into: