如何在没有数据库的情况下,通过cshtml的viewmodel传递List。

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

我正在开发一个网络应用,在这个应用中,你可以保存你店里的库存。但是当我点击提交时,之前的列表并没有显示在提交的表单中。

其他所有的信息都在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>
c# asp.net-mvc list viewmodel
1个回答
0
投票

你需要使用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>

0
投票

当你调用index时,你是在实例化一个新的Item obj,这就是为什么你看不到你之前添加的项目。把它改成这样。

public Item item; 

public IActionResult Index()
    {
        if(item == null)
       {
         Item item = new Item();
         return View(item);
       }
       return View(item);
    }
© www.soinside.com 2019 - 2024. All rights reserved.