我是C#的新手,但是当我提交表单时,我会抓住表单值并创建一个新项目并根据以下代码将其放入列表中:
public ActionResult Movie()
{
int id = Convert.ToInt16(Request.Form["inputmovieid"]);
string name = Request.Form["inputmovietitle"];
int year = Convert.ToInt16(Request.Form["inputproductionyear"]);
List<Movie> movies = new List<Movie>();
Movie movieitem = new Movie(id, name, year);
movies.Add(movieitem);
return View(movies);
}
在.cshtml文件中,然后我使用foreach循环打印创建的项目,但问题是如果我再次使用新项目的新值提交此表单,它将覆盖列表中的旧值。
渴望的结果:再次提交表单时,我希望将新项目添加到列表中而不覆盖旧项目。有谁知道如何修改上面的代码来解决这个问题?
答案 0 :(得分:0)
您需要将数据存储到跟踪或 ViewState中的列表的数据库中。
类似的东西:
public ActionResult Movie()
{
var list = ViewState["MyList"] as List<Movie>;
if(list == null)
{
list = new List<Movie>();
ViewState["MyList"] = list;
}
int id = Convert.ToInt16(Request.Form["inputmovieid"]);
string name = Request.Form["inputmovietitle"];
int year = Convert.ToInt16(Request.Form["inputproductionyear"]);
Movie movieitem = new Movie(id, name, year);
list.Add(movieitem);
return View(list);
}
但是我对asp.net的了解有点褪色,你可能需要将Movie类标记为可序列化,
[Serializable]
public class Movie
{
...
}
每次获得回发/重新加载时,都会重建整个类,因此将列表存储到字段中对您无济于事。这就是为什么他们发明了观点状态。 (用html发送隐藏的表单域)