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

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

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

视图模型:

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):

@*
    For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
*@
@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>

就是这样

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

Here is the exception

c# asp.net-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.