每次我尝试注册一个新对象时,它都会返回到数据库为空或 null。我该怎么办?

问题描述 投票:0回答:1

我认为我的视图模型正在从未加载页面的空字段中获取值,或者根本没有获取值,只是从模型中获取。

查看模型:

namespace Projeto_Vendedores.Models.ViewModels
{
    public class SellerFormViewModel
    {
        public Seller Seller { get; set; }
        public ICollection<Department> Departments { get; set; } 
    }
}

型号:

using Projeto_Vendedores.Migrations;

namespace Projeto_Vendedores.Models
{
    public class Seller
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
        public double BaseSalary { get; set; }
        public DateTime BirthDate { get; set; }

        public Department Department { get; set; }
        public int DepartmentId { get; set; }

        public ICollection<SalesRecord> Sales { get; set; } = new List<SalesRecord>();

        public Seller()
        {
        }

        public Seller(int id, string name, string email, double baseSalary, DateTime birhtDate, Department department)
        {
            Id = id;
            Name = name;
            Email = email;
            BaseSalary = baseSalary;
            BirthDate = birhtDate;
            Department = department;
        }       
    }
}

控制器:

using Microsoft.AspNetCore.Mvc;
using Projeto_Vendedores.Models;
using Projeto_Vendedores.Models.ViewModels;
using Projeto_Vendedores.Services;

namespace Projeto_Vendedores.Controllers
{
    public class SellersController : Controller
    {
        private readonly SellerService _sellerService;
        private readonly DepartmentService _departmentService;

        public SellersController(SellerService sellerService, DepartmentService departmentService)
        {
            _sellerService = sellerService;
            _departmentService = departmentService;
        }

        public IActionResult Index()
        {
            var list = _sellerService.FindAll();
            return View(list);
        }

        public IActionResult Create()
        {
            var departments = _departmentService.FindAll();
            var viewModel = new SellerFormViewModel { Departments = departments };
            return View(viewModel);
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public IActionResult Create(Seller obj)
        {
            _sellerService.Insert(obj);// it just add to the database and save changes
            return RedirectToAction(nameof(Index));
        }
    }
}

创建表单(POST):

@model Projeto_Vendedores.Models.ViewModels.SellerFormViewModel
@{
    ViewData["Title"] = "Create";
}

<h1>@ViewData["Title"]</h1>
<h4>Seller</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="Create">
            <div class="form-group">
                <label asp-for="Seller.Name" class="form-label"></label>
                <input asp-for="Seller.Name" class="form-control" />
            </div>
            <div class="form-group">
                <label asp-for="Seller.Email" class="form-label"></label>
                <input asp-for="Seller.Email" class="form-control" />
            </div>
            <div class="form-group">
                <label asp-for="Seller.BirthDate" class="form-label"></label>
                <input asp-for="Seller.BirthDate" class="form-control" />
            </div>
            <div class="form-group">
                <label asp-for="Seller.BaseSalary" class="form-label"></label>
                <input asp-for="Seller.BaseSalary" class="form-control" />
            </div>
            <div class="form-group">
                <label asp-for="Seller.DepartmentId" class="control-label"></label>
                <select asp-for="Seller.DepartmentId" asp-items="@(new SelectList(Model.Departments,"Id", "Name"))" class="form-control"></select>
            </div>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
            </div>
        </form>     
    </div>
</div>

我希望应用程序正确读取数据,但每当我尝试时,应用程序都会停止,并显示一个异常,告诉我记录的第一个字段为空,其余字段也为空。

例外:

Microsoft.EntityFrameworkCore.DbUpdateException:保存实体更改时发生错误。有关详细信息,请参阅内部异常。

内部异常:

PostgresException:23502:关系“卖家”的“名称”列中的空值违反了非空限制
详细信息:记录失败包含 (41, null, null, 0, 0, -infinity)。

异常发生在这一行:

public void Insert(Seller obj)
{
    _context.Add(obj);
    _context.SaveChanges(); // here
}
c# entity-framework-core asp.net-core-mvc viewmodel
1个回答
0
投票

看起来您没有向 SellerFormViewModel.Seller 分配任何内容,然后尝试绑定到 null Seller 上的属性。

试试这个:

var departments = _departmentService.FindAll();
var viewModel = new SellerFormViewModel { Departments = departments, Seller = new Seller() };
return View(viewModel);

另外,不是每个人都有耐心进行语言翻译,如果你下次用英文发布技术细节,你可能会得到更多帮助

© www.soinside.com 2019 - 2024. All rights reserved.