Asp Mvc post添加项目到列表
本文关键字:列表 项目 添加 Mvc post Asp | 更新日期: 2023-09-27 18:11:09
我开始学习asp.net。我想在表中显示列表并在该页面上创建新行
i create model
public class Student
{
public string Name { get; set; }
public string Surname { get; set; }
}
然后查看
@model IEnumerable<WebApplication1.Models.Student>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Surname)
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Surname)
</td>
</tr>
}
</table>
<div class="form-horizontal">
@using (Html.BeginForm())
{
<div class="form-group">
<label class="col-md-2">Имя</label>
@Html.TextBox("name", null, new {@class = "form-control col-lg-4"})
</div>
<div class="form-group">
<label class="col-md-2">Фамилия</label>
@Html.TextBox("surname", null, new {@class = "form-control col-lg-4"})
</div>
<button type="submit" class="btn btn-default">Добавить</button>
}
</div>
<div class="panel-footer">
<h3>@ViewBag.Msg</h3>
</div>
和控制器
List<Student> Students=new List<Student>
{
new Student() {Name = "1",Surname = "1"},
new Student() {Name = "2",Surname = "2"},
new Student() {Name = "3",Surname = "3"}
};
// GET: Home
public ActionResult Index()
{
return View(Students);
}
[HttpPost]
public ActionResult Index(string name,string surname)
{
Students.Add(new Student() {Name = name,Surname = surname});
@ViewBag.Msg = "User add : " + name +" "+ surname;
return View(Students);
}
所有工作都很好,但当我添加新行最后一行重新创建(在我的集合中只添加一行)。我哪里错了?对不起,我的英语不好
该列表是控制器类的私有变量,因为在每次请求页面时,都会创建一个新的控制器实例,每次都会用它们的初始值初始化列表项,然后只将新值添加到它。
您可以将列表定义为静态,以防止对每个请求进行初始化:
static List<Student> Students=new List<Student>
{
new Student() {Name = "1",Surname = "1"},
new Student() {Name = "2",Surname = "2"},
new Student() {Name = "3",Surname = "3"}
};
您没有在任何地方持久化您的数据,因此它将在每次请求时重置。这个属性:
List<Student> Students
是一个类级属性。每当创建类的实例时,它都会初始化。并且为向服务器发出的每个单独请求创建一个控制器类的实例。所以这里发生的是:
- 用户请求页面
- 创建控制器对象,初始化列表
- 控制器返回列表给用户
- 用户发布新条目
- 创建控制器对象,初始化列表
- 控制器将第4项添加到列表
- 控制器返回列表给用户
步骤4-7重复每个帖子。
为了保留你的数据,你需要把它存储在某个地方。数据库是理想的选择。但也有其他的选择,这取决于你正在做的事情的范围。
例如,为了测试功能,您可以将其存储在会话状态中。在这种情况下,它将为每个用户会话重置,而不是为每个请求重置。或者您可以将列表设置为static
,在这种情况下,它将在整个应用程序实例中用于所有用户。(但不会是线程安全的。)