将新项添加到列表而不覆盖旧项

时间:2016-09-19 12:07:28

标签: c# asp.net list

我是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循环打印创建的项目,但问题是如果我再次使用新项目的新值提交此表单,它将覆盖列表中的旧值。

渴望的结果:再次提交表单时,我希望将新项目添加到列表中而不覆盖旧项目。有谁知道如何修改上面的代码来解决这个问题?

1 个答案:

答案 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发送隐藏的表单域)