我开始学习asp网。我想在表格中显示列表并在此页面上创建新行
我创建模型
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);
}
所有工作都很好但是当我添加新行的最后一行重新创建时(在我的集合中只添加一行)。哪里错了?抱歉我的英文不好
答案 0 :(得分:3)
列表是控制器类的私有变量,因为在每次页面请求时,都会创建一个新的控制器实例,每次使用初始值初始化列表项,然后只是新的值将被添加到它 您可以将列表定义为静态,以防止对每个请求进行初始化:
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"}
};
答案 1 :(得分:1)
您不会将数据保存在任何位置,因此每次请求都会重置数据。这个属性:
List<Student> Students
是一个类级属性。每次创建类的实例时,它都会被初始化。并且为服务器的每个单独请求创建控制器类的实例。所以这里发生的是:
每个帖子都重复步骤4-7。
为了保留您的数据,您需要将其存储在某个位置。数据库是理想的。但是还有其他选择,取决于你正在做的范围。
例如,只是为了测试功能,您可以将其存储在会话状态中。在这种情况下,它将为每个用户会话重置,而不是为每个请求重置。
或许您可以创建列表static
,在这种情况下,它将在整个应用程序实例中用于所有用户。 (但不是线程安全的。)