我正在开发一个网络应用,在这个应用中,你可以保存你店里的库存。但是当我点击提交时,之前的列表并没有显示在提交的表单中。
其他所有的信息都在viewmodel中。
欢迎任何帮助
以下是我的代码
INDEX.CSHTML
@{
ViewData["Title"] = "Home Page";
}
@model WebApp.Models.Item;
<div class="text-center">
<h1 class="display-4">Stock manager</h1>
<form asp-controller="Home" asp-action="AddItem" method="post">
<label>Naam</label>
<input type="text" asp-for="Name" name="Name" />
<label>Aantal</label>
<input type="number" asp-for="Aantal" name="Aantal" />
<label>Beschrijving</label>
<input type="text" asp-for="Beschrijving" name="Beschrijving" />
<input type="submit" value="toevoegen" />
<h1 class="display-4">Stock list</h1>
@if (Model.Stock != null)
{
<ul>
@for (int idx = 0; idx < Model.Stock.Count; idx++)
{
<li>
@Html.HiddenFor(Model.Stock[idx].Name)
@Html.HiddenFor(Model.Stock[idx].Aantal)
@Html.HiddenFor(Model.Stock[idx].Beschrijving)
<h3>@Model.Stock[idx].Name</h3>
<p>Aantal: @Model.Stock[idx].Aantal</p>
<p>Beschrijving: @Model.Stock[idx].Beschrijving</p>
</li>
}
</ul>
}
else
{
<span>Nog niets toegevoegd</span>
}
</form>
</div>
首页控制器.CS
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using WebApp.Models;
namespace WebApp.Controllers
{
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public List<Item> items;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
Item item = new Item();
return View(item);
}
public IActionResult AddItem(Item item)
{
if (item.Stock == null)
{
item.Stock = new List<Item>();
}
item.Stock.Add(new Item
{
Name = item.Name,
Aantal = item.Aantal,
Beschrijving = item.Beschrijving
});
return View("Index",item);
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
}
项目.CS
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace WebApp.Models
{
public class Item
{
public string Name { get; set; }
public int Aantal { get; set; }
public string Beschrijving { get; set; }
public List<Item> Stock { get; set; }
}
}
这是一个学校的项目,由于周末的结束,所以我有点担心,再加上还有一些单元测试要做。
谢谢
添加2个项目后的原始HTML
<div class="text-center">
<h1 class="display-4">Stock manager</h1>
<form method="post" action="/Home/AddItem">
<label>Naam</label>
<input type="text" name="Name" id="Name" value="test" />
<label>Aantal</label>
<input type="number" name="Aantal" data-val="true" data-val-required="The Aantal field is required." id="Aantal" value="3" />
<label>Beschrijving</label>
<input type="text" name="Beschrijving" id="Beschrijving" value="test" />
<input type="submit" value="toevoegen" />
<h1 class="display-4">Stock list</h1>
<ul>
<li>
<h3>test</h3>
<p>Aantal: 3</p>
<p>Beschrijving: test</p>
</li>
</ul>
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8KvM1zMUD4ZOqfaYG4a2bsBumYriiijPssoEk30unaH30LZcWhGlluH47isCWUR2P-tDvQNQWZgxgHJRhqHf_2SyfcRI80clCL3fvM0hETtZ43eiWokSS3vId3OQe-P8rP1jBe5RWYyt8n9UB9yPjaI" /></form>
</div>
你需要使用for循环,而不是foreach和索引你的列表项目,像这样......
<ul>
@for (int idx = 0; idx < Model.Stock.Count; idx++) {
<li>
@Html.HiddenFor(model => Model.Stock[idx].Name)
@Html.HiddenFor(model => Model.Stock[idx].Aantal)
@Html.HiddenFor(model => Model.Stock[idx].Beschrijving)
<h3>Model.Stock[idx].Name</h3>
<p>Aantal: Model.Stock[idx].Aantal</p>
<p>Beschrijving: Model.Stock[idx].Beschrijving</p>
</li>
}
</ul>
当你调用index时,你是在实例化一个新的Item obj,这就是为什么你看不到你之前添加的项目。把它改成这样。
public Item item;
public IActionResult Index()
{
if(item == null)
{
Item item = new Item();
return View(item);
}
return View(item);
}