我认为我的视图模型正在从未加载页面的空字段中获取值,或者根本没有获取值,只是从模型中获取。
查看模型:
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
}
看起来您没有向 SellerFormViewModel.Seller 分配任何内容,然后尝试绑定到 null Seller 上的属性。
试试这个:
var departments = _departmentService.FindAll();
var viewModel = new SellerFormViewModel { Departments = departments, Seller = new Seller() };
return View(viewModel);
另外,不是每个人都有耐心进行语言翻译,如果你下次用英文发布技术细节,你可能会得到更多帮助