如何将数据添加到ASP.NET MVC 4.0中的List <t>中?</t>

时间:2014-01-22 19:32:26

标签: c# asp.net-mvc asp.net-mvc-4

我是MVC的新人。
我在下面的模型中有一个课程。

public class UserInfo
{
  public string Name{get;set;}
  public string Surname{get;set;}
}

我有一个像这样的控制器。

public class HomeController : Controller
    {
    //
    // GET: /Home/

    List<UserInfo> Users = new List<UserInfo>(); 
    public ActionResult Index()
    {
        return View();
    }

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

    [HttpPost]
    public ActionResult Create(UserInfo userInfo)
    {
        if (ModelState.IsValid)
        {
            Users.Add(userInfo);
            return RedirectToAction("Index");
        }
        return View();
    }

}

每当我在浏览器中按“创建”按钮时,它都会重定向到“索引视图”。 但是List<UserInfo>是空的。为什么会这样?如何将数据保存到列表中并从List

的网格或表格中显示

5 个答案:

答案 0 :(得分:3)

控制器是无状态的。每次调用动作时都会创建一个新实例,这就是您的列表始终为空的原因。

如果要在控制器操作之间保持列表,则需要某种持久性机制 - 数据库,缓存等。

答案 1 :(得分:1)

我相信Maess首先指出了细节。

即使您的[HTTPPost] Create操作将新用户添加到List对象,也似乎没有任何方法可以将输入的数据保存到持久存储中。每次实例化控制器时,List对象都将为空,因为您当前已对其进行编码。

如果您希望将数据存储到数据库,请从asp.net查看本教程的一种方法:

http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/accessing-your-models-data-from-a-controller

答案 2 :(得分:1)

在您的视图中为对象添加此引用:

Inherits="System.Web.Mvc.ViewPage<List<UserInfo>>" %>

在你的班上改变这个:

List<UserInfo> Users = new List<UserInfo>();
    public ActionResult Index()
    {
        return View(Users);
    }

但是为了将列表数据保存在内存中,最好将List对象声明为静态,因为这样他就会保留已经添加的信息。例如:

 public class HomeController : Controller
    {
        public static List<UserInfo> Users = null; 

        //
        // GET: /Home/

        public ActionResult Index()
        {
            return View(Users);
        }

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

        [HttpPost]
        public ActionResult Create(UserInfo userInfo)
        {
            if (ModelState.IsValid)
            {
                Users.Add(userInfo);
                return RedirectToAction("Index");
            }
            return View();
        }

    }

答案 3 :(得分:1)

使您的列表静态

static List<UserInfo> Users = new List<UserInfo>(); 

答案 4 :(得分:1)

每次使用List<T>关键字创建new时,都会创建一个没有任何数据类型的实例,因此使用DatabaseContext从数据库中获取数据并将其绑定到列表中,如下所示:

List<UserInfo> Users = new List<UserInfo>();
Users.Add(_databasecontext.Users.ToList());

并将其返回视图。