ASP dot net mvc-将项目添加到列表不起作用,它什么也不做

时间:2019-03-07 13:12:22

标签: c# asp.net-mvc forms model controller

我正在使用ASP.net mvc制作一个Web应用程序。您可以在以下位置查看食谱:/ recipe

问题是,当我在/ recipe / create中添加配方时,它不起作用。我希望它显示在/ recipe页面上。 Recipe Page

所以我认为控制器或视图中有问题,但我认为是控制器。

这是配方控制器代码:

 public class RecipeController : Controller
{
    List<RecipeViewModel> vm = new List<RecipeViewModel>();

    public IActionResult Index()
    {
        foreach (var recept in MockDataRecipeFactory.GetRecipes())
        {
            vm.Add(new RecipeViewModel
            {
                Id = recept.Id,
                Name = recept.Name,
                Category = recept.Category,
                NumberOfIngredients = recept.Ingredients.Count
            });
        }
        return View(vm);
    }

    public IActionResult Create()
    {
        return View();
    }

    [HttpPost]
    public IActionResult Create(RecipeViewModel recipemodel)
    {
        vm.Add(new RecipeViewModel
        {
            Name = recipemodel.Name,
            Id = recipemodel.Id,
            Category = recipemodel.Category,
            NumberOfIngredients = recipemodel.NumberOfIngredients
        });

        return RedirectToAction("Index");
    }

我要做的是,在顶部有一个RecipeViewModel列表,并将创建的项目添加到该列表中。

这是RecipeViewModel:

    public class RecipeViewModel
{
    public int Id { get; set; }
    [DisplayName("Naam")]
    public string Name { get; set; }
    [DisplayName("Categorie")]
    public RecipeCategory Category { get; set; }
    [DisplayName("Aantal")]
    public int NumberOfIngredients { get; set; }
}

这是视图中的表单:

<div class="row">
<div class="col-md-4">
    <form asp-action="Create">
        <div class="form-group">
            <label asp-for="Id">Id:</label>
            <input asp-for="Id" type="text" class="form-control" name="id" />
        </div>
        <div class="form-group">
            <label asp-for="Name">Naam:</label>
            <input asp-for="Name" type="text" class="form-control" name="name" />
        </div>

        <div class="form-group">
            <label asp-for="Category">Categorie</label>
            <select class="form-control" asp-for="Category">
                <option value="0">none</option>
                <option value="0">Cake</option>
                <option value="0">Desert</option>
                <option value="0">Sidedish</option>
                <option value="0">Maincourse</option>
            </select>
        </div>
        <div class="form-group">
            <label asp-for="NumberOfIngredients">Aantal</label>
            <input asp-for="NumberOfIngredients" type="number" class="form-control" name="number" />
        </div>
        <button type="submit" class="btn btn-primary">Voeg toe</button>
    </form>
</div>

因此,当我添加食谱时,它会返回到食谱页面,但不会显示添加的食谱。我做错了什么? Create Recipe Page

1 个答案:

答案 0 :(得分:1)

public class RecipeController : Controller
{
    List<RecipeViewModel> vm = new List<RecipeViewModel>();

您的vm列表是一个实例字段。控制器和列表将根据每个请求再次创建。

对于简单的(演示)解决方案,请将其设为静态:

static List<RecipeViewModel> vm = new List<RecipeViewModel>();

这不是线程安全的,也不适合用于生产。但是您应该能够对其进行试驾。