c# - 在 asp.net 核心中正确更新表
问题描述
我一直在试图找出为什么会发生这种情况以及如何解决它,但我不确定。我正在尝试使用附加到订单的 OrderID 更新我的员工表。
我收到一条错误消息:
System.NullReferenceException:“对象引用未设置为对象的实例。”
orderToBeAssigned 为空。
我通过添加到控制器操作方法暂时摆脱了错误
if (orderToBeAssigned != null)
{
driver.OrderID = orderToBeAssigned.OrderID;
orderToBeAssigned.OrderStatus = "Unavailable";
}
但我仍然无法更新我的表格。请帮忙!
这是我的代码:
public class Employee
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DOB { get; set; }
public string WorkStatus{get;set;}
public bool LoginStatus { get; set; }
public int EmployeeID { get; set; }
public List<Order> Order { get; set; }
public Employee() {
WorkStatus = "Unavailable";
LoginStatus = false;
}
}
订单模式
public class Order
{
public string OrderNumber { get; set; }
public string OrderStatus { get; set; }
public int OrderID { get; set; }
public int TrailerForLoadID { get; set; }
public virtual Trailer TrailerForLoad { get; set; }
public int CustomerOrdersID { get; set;}
// navigational property for the "Customer" Class
public virtual Customer CustomerOrders { get; set; }
public int? EmployeeID { get; set; }
public virtual Employee Driver { get; set; }
public DateTime DueDate { get; set; }
public DateTime DateDelivered { get; set; }
public DateTime DateAssigned { get; set; }
public bool Completed { get; set; }
public Order()
{
OrderStatus = "Available";
Completed = false;
}
}
查看模型:
public class AssignOrderViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int EmployeeID {get;set;}
public int TrailerID { get; set; }
public int OrderID { get; set; }
public List<SelectListItem> Orders { get; set; }
public string OrderNumber { get; set; }
public string OrderStatus { get; set; }
public AssignOrderViewModel()
{
}
public AssignOrderViewModel(Employee driver, IEnumerable<Order> orders)
{
FirstName = driver.FirstName;
LastName = driver.LastName;
EmployeeID = driver.EmployeeID;
Orders = new List<SelectListItem>();
foreach (var order in orders)
{
Orders.Add(new SelectListItem
{
Value = (order.OrderID).ToString(),
Text = order.OrderNumber
});
};
}
}
看法:
<form asp-controller="Employee" asp-action="AssignOrder" method="post">
<p> Driver: @Model.FirstName @Model.LastName </p>
<fieldset>
<input type="hidden" name="OrderID" value="@Model.OrderID" />
<input type="hidden" name="EmployeeID" value="@Model.EmployeeID"/>
<div class="form-group">
<label asp-for="@Model.OrderID">Order Number</label>
<select asp-for="@Model.OrderID" asp-items="@Model.Orders"></select>
<span asp-validation-for="@Model.OrderID"></span>
</div>
<div class="form-group">
<input type="submit" value="Submit" name="submitButton" />
</div>
</fieldset>
</form>
控制器动作方法:
public IActionResult AssignOrder(int id)
{
Employee driverToAssignOrder = context.Employees.FirstOrDefault(x => x.EmployeeID == id);
IList<Order> availableOrders = context.Orders.Where(x => x.OrderStatus == "Available").ToList();
AssignOrderViewModel assignOrderViewModel = new AssignOrderViewModel(driverToAssignOrder, availableOrders);
return View(assignOrderViewModel);
}
[HttpPost]
public IActionResult AssignOrder(AssignOrderViewModel assignOrderViewModel)
{
Employee driver = context.Employees.FirstOrDefault(o => o.EmployeeID == assignOrderViewModel.EmployeeID);
Order orderToBeAssigned = context.Orders.FirstOrDefault(t => t.OrderID == assignOrderViewModel.OrderID);
if (orderToBeAssigned != null)
{
orderToBeAssigned.OrderID = driver.EmployeeID;
orderToBeAssigned.OrderStatus = "Unavailable";
}
context.SaveChanges();
return Redirect("/Employee");
}
请我学习编码。我知道 orderToBeAssigned 为空。我只想能够更新表格。我应该怎么办 ?
解决方案
推荐阅读
- wagtail - 将 Wagtail BooleanField 值设置为 True,禁用
- php - “禁止您无权访问/
在此服务器上”从不同系统访问时出错 - javascript - 在另一个 html 页面中显示上传的图像
- php - 当两个脚本要同时在一个带有 LOCK_EX 的文件上写入时会发生什么?
- flutter - 颤振中的异步验证仍然存在问题
- indexing - SAS 尝试在小样本数据集上使用哈希表进行模糊匹配时内存不足
- mysql - sql计算小于当前日期的日期
- css - 在 Chrome 扩展中使用 Material 主题
- regex - 使用正则表达式进行字符串搜索
- python - 基于统一顺序的交叉实现