【问题标题】:Why is my MVC controller action having trouble saving items to a List<>?为什么我的 MVC 控制器操作无法将项目保存到 List<>?
【发布时间】:2017-11-23 14:29:41
【问题描述】:

您好,出于某种原因,我可以在一个 Action 方法中将项目添加到列表中,但是每当我通过另一种方法将列表传递给视图时,列表似乎是空的。为什么会这样,有人可以解释一下吗?以前用别的方法加过东西,为什么列表是空的?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Hotel.Models;
using System.Diagnostics;

namespace HotelTwee.Controllers
{
    public class HomeController : Controller
    {

        public List<Hotel> preOrders = new List<Hotel>();


        public IActionResult Index()
        {    
            // List Count is ZERO here
            return View(preOrders);
        }


        [HttpGet]
        public IActionResult Create()
        {
            return View();
        }

        [HttpPost]
        public IActionResult Create(Hotel order)
        {
            preOrders.Add(order);
            // List COUNT is ONE here
            return RedirectToAction("Index", preOrders);               
        }
    }
}

编辑:

删除 RedirectToAction 并使用 return View("Index", preOrders) 已解决问题

【问题讨论】:

  • 你的控制器为每个请求实例化,它不保持任何状态。
  • 但是我必须使用一个列表来进行我的练习。在这种情况下,如何使用 List 而不是数据库,而不将它放在控制器中?
  • 将数据保存到永久介质(例如:数据库)并在索引操作中再次读取。
  • 列出static 可以解决您的问题,但是出于并发原因,这可能不是一个好主意

标签: c# asp.net-mvc


【解决方案1】:

RedirectToAction 向浏览器返回一个 HTTP 302 响应,这会导致浏览器向指定的操作发出 GET 请求。

所以你的控制器/视图的状态消失了。

另外,RedirectToAction 的第二个参数是为 routeValues 设计的。

https://msdn.microsoft.com/en-us/library/system.web.mvc.controller.redirecttoaction(v=vs.118).aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    相关资源
    最近更新 更多