首页 > 解决方案 > 在 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 为空。我只想能够更新表格。我应该怎么办 ?

标签: c#entity-frameworkasp.net-core

解决方案


推荐阅读