// 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>();
}
}
我的问题模型的代码
// Foreign Key references
[Required(ErrorMessage = "You must select a Problem.")]
[Display(Name = "Problem ID")]
public int ProblemID { get; set; }
public Problem Problem { get; set; }
我的 QualityRepresentative 代码的一小部分显示了前键
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; }
}
}
这是我的 ncr 模型的代码
<select asp-for="QualityRepresentative.ProblemID" class="form-control" asp-items="ViewBag.ProblemID"></select>
我的视图代码的小提取,显示了选择的结构
所以基本上我想要的是将我的“问题”项目绑定到我视图中的下拉列表中。
我的模型结构是这样的:NCR --> QualityRepresentative --> Problem
我已经尝试了多种解决方案,但总是收到与“未设置对象引用”相关的错误。仅出于测试目的,我尝试将 QualityRepresentativeID 项目绑定到我的视图并且它有效,但如果我尝试使用 ProblemID 项目执行此操作,则它不起作用。
<select asp-for="QualityRepresentative.ProblemID" class="form-control" asp-items="ViewBag.ProblemID"></select>
根据您的asp-items="ViewBag.ProblemID", 尝试改变:
ViewData["QualityRepresentative.ProblemID"] = new SelectList(_context.Problems, "ID", "ProblemID");
进入:
ViewBag.ProblemID = new SelectList(_context.Problems, "ID", "ProblemID");