簡體   English   中英

數據已檢索但未保存或更新 ASP.NET Core 3.1

[英]Data is retrieved but is not getting saved or updated ASP.NET Core 3.1

我的問題與這個問題類似,但我已經應用了答案,但它仍然無法正常工作,並且在將數據存儲在數據庫中時,我使用了稍微不同的方法。

員工 Model Class

    public class Employee
    {
        [Key]
        public int EmployeeId { get; set; }

        [Required]
        public string FirstName { get; set; }
        [Required]
        public string LastName { get; set; }
}

鍵入與保存相關的腳本代碼

private urlSaveEmployee = '/employee/save';

private save() {
        try {

            const employee = this.createEmployee();
            Util.request(this.urlSaveEmployee, 'post', 'json', (response) => {
                if (response != null) {
                    $.notify(response.message);
                    location.reload();
                } else {
                    $.notify(response.message);
                    console.error('Failed to get data #T7G985. Please try again.');
                }
            }, () => {
            }, employee);
        } catch (e) {
            console.error(e);
        }
    }

    private createEmployee() {
        try {

            const employee = {
                EmployeeId: $('#employee_id').val(),
                Firstname: $('#first_name').val(),
                Lastname: $('#last_name').val()
            };
            return employee;
        } catch (e) {
            console.error(e);
        }
    }

保存按鈕 查看代碼

<tr>
                <td style="width: 100px">First Name*</td>
                <td>
                    <input type="hidden" id="employee_id" value="@Employee.EmployeeId" />
                    <input class="form-control-sm w-100" id="first_name" value="@Employee.FirstName" autocomplete="off" />
                </td>
            </tr>
            <tr>
                <td style="width: 100px">Last Name*</td>
                <td>
                    <input class="form-control-sm w-100" id="last_name" value="@Employee.LastName" autocomplete="off" />
                </td>
            </tr>


<button type="button" class="btn btn-sm btn-outline-primary employee-form-save" id="save_form">
                        <i class="fa fa-floppy-o" style="margin-right:5px"></i>
                        Save
                    </button>

Controller 保存相關代碼

        [HttpPost("employee/save")]
        public async Task<IActionResult> SaveEmployee(Employee employee) {
            try
            {
                Employee employeeFromDb = await _db.Employees.FirstOrDefaultAsync(e => e.EmployeeId == employee.EmployeeId);

                if (employeeFromDb == null)
                {
                    _db.Employees.Add(employee);
                    _db.SaveChanges();
                    return Json(new { success = true, message = "Saved Successfully" });
                } else {
                    _db.Employees.Update(employee);
                    _db.SaveChanges();
                    return Json(new { success = true, message = "Updated Successfully" });
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return Json(new { success = false, message = "Error while saving" });
            }
        }

當我單擊保存按鈕時,它會重新加載頁面而不做任何更改。 我添加了斷點,據此, employeeFromDb顯然在.Update子句中,但它只是刷新頁面並且數據庫保持不變。 這是該斷點處的屏幕截圖: 在此處輸入圖像描述

很高興它起作用了,所以這只是一個測試。 您對 EntityState 的發現確實是您應該從本教程中閱讀的內容 - https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/crud?view=aspnetcore-3.1

實體狀態 數據庫上下文跟蹤 memory 中的實體是否與其在數據庫中的相應行同步,並且此信息確定調用 SaveChanges 方法時會發生什么。 例如,當您將新實體傳遞給 Add 方法時,該實體的 state 設置為已添加。 然后,當您調用 SaveChanges 方法時,數據庫上下文會發出 SQL INSERT 命令。

如果您查看 Edit 示例,其中 Bind 屬性與記錄的參數 Id 一起傳遞,您可能會將其用作您工作的更好示例。 但是,如果您想創建一個映射器 class 以將您的請求 object 轉換為實體框架 object 以便正確更新它也可以工作。 我想知道您之前是否真的遇到過異常但由於斷點不在該塊上而錯過了它。

如果通過 Ajax json 調用綁定 - https://stackoverflow.com/a/60180783/8161471 ,這也可能很有用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM