我正在尝试创建一个项目,但它说
Layout = _DashboardLayout
Dashboard/Inventory/Create.cshtml
中是我的问题,但除了我正在使用InventoryController
所做的事情之外,我看不到任何问题。
这是错误:
NullReferenceException:未将对象引用设置为对象的实例。
Create.cshtml 中的 AspNetCoreGenerateDocument.Views_Dashboard_Inventory_Create.ExecuteAsync() ...
它在某种程度上与此相关,但有点不同,因为
_DashboardLayout
是问题所在。
刚刚访问模型时ASP.NET Core NullReferenceException
这是我的代码
InventoryController
:
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Gravitywears.Entities;
using Gravitywears.Models;
using System.Threading.Tasks;
namespace Gravitywears.Controllers.Dashboard
{
// [Route("Dashboard/[controller]")]
public class InventoryController : Controller
{
private readonly AppDbContext _context;
public InventoryController(AppDbContext context)
{
_context = context;
}
// ...
[HttpPost("Dashboard/Inventory/Create")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id,ProductName,ProductBrand,Quantity,TypeOfProduct,Price,AgeRange")] Product product)
{
if (ModelState.IsValid)
{
try
{
_context.Add(product);
await _context.SaveChangesAsync();
ModelState.Clear();
TempData["SuccessMessage"] = "Product successfully created!";
return RedirectToAction("Create");
}
catch (DbUpdateException)
{
ModelState.AddModelError("", "Please enter a unique inputs.");
return View("~/Views/Dashboard/Inventory/Create.cshtml", product);
}
}
// If we got this far, something failed; redisplay form
TempData["ErrorMessage"] = "Failed to create product. Please check the form and try again.";
return View("~/Views/Dashboard/Inventory/Create.cshtml", product);
}
}
}
这是
Create.cshtml
视图:
@{
Layout = "_DashboardLayout"; // Use the layout for consistent design
}
@model Gravitywears.Models.Product
<form asp-controller="Inventory" asp-action="Create" method="post" class="inv-cp-ppqty">
<div class="image">
<label for="imageUpload">
<svg id="imageLabel" width="16" height="16" viewBox="0 0 16 16" fill="none"
xmlns="http://www.w3.org/2000/svg">
</svg>
<img id="imagePreview"
style="display: none; max-width: 100%; height:100%; object-fit: cover; border-radius: 10px;" />
</label>
@* <input asp-for="Image" type="file" id="imageUpload" name="Image" required
onchange="previewImage(event)" /> *@
@* <span asp-validation-for="Image" class="text-danger"></span> *@
@* <img src="" alt=""> *@
</div>
<div class="fill-inv">
<div class="inp-inv">
<input asp-for="ProductName" type="text" placeholder="Product Name" />
<span asp-validation-for="ProductName" class="text-danger"></span>
</div>
<div class="inp-inv">
<input asp-for="ProductBrand" type="text" placeholder="Product Brand" />
<span asp-validation-for="ProductBrand" class="text-danger"></span>
</div>
<div class="inp-inv">
<input asp-for="Quantity" type="number" placeholder="Quantity" min="1" />
<span asp-validation-for="Quantity" class="text-danger"></span>
</div>
<div class="inp-inv">
<select asp-for="TypeOfProduct" id="typeOfProduct" class="form-control">
<option value="" disabled selected> Type of Product </option>
<option value="Cloth"> Cloth </option>
<option value="Pants"> Pants </option>
<option value="Accessories"> Accessories </option>
<option value="SportsGear"> Sports Gear </option>
<!-- Add more options as needed -->
</select>
<span asp-validation-for="TypeOfProduct" class="text-danger"></span>
</div>
<div class="inp-inv">
<select asp-for="AgeRange" id="ageRange" class="form-control">
<option value="" disabled selected> Age </option>
<option value="Kids"> -18 </option>
<option value="Adults"> 18+ </option>
<!-- Add more options as needed -->
</select>
<span asp-validation-for="AgeRange" class="text-danger"></span>
</div>
<button type="submit" class="button-type">
<h5> Create Item </h5>
</button>
</div>
</form>
我只期望创建将通过
asp-for
、 asp-validation-for
和其他属性。现在它也会传递到我的数据库。
但是由于错误与布局有关,但我现在不知道该怎么办。