MVC创建功能不会将创建的曲目添加到列表中

时间:2018-08-22 12:46:59

标签: c# asp.net-mvc model-view-controller

我的MVC应用程序有问题。该应用程序是关于一个跟踪列表的,其中有一个称为创建跟踪的功能。

我创建了一个dataprovider类,该类将虚拟数据添加到列表中。然后列表显示在页面上。该列表本身起作用,并显示虚拟数据。现在,我在控制器中创建了一个create动作,如下所示:

public ActionResult Create(FormCollection collection)
    {
        try
        {
            // TODO: Add insert logic here

            int hours = int.Parse(collection["Hours"]);
            int minutes = int.Parse(collection["Minutes"]);
            int seconds = int.Parse(collection["Seconds"]);
            Track track = new Track();
            track.Name = collection["Name"];
            track.Artist = collection["Artist"];
            track.AlbumSource = collection["AlbumSource"];
            track.length = new AudioDevices.Time(hours, minutes, seconds);
            track.Style = (Category)Enum.Parse(typeof(Category), collection["style"]);
            trackList.Add(track);
            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }

现在...启动我的应用程序时,单击创建。在此输入我的曲目信息,然后单击“保存”。现在,当保存时,我返回到曲目列表,但是该曲目没有添加到我的列表中。

我的Visual Studio显示该代码已处理2个请求,没有任何错误。它只是没有被添加到列表中。

我了解我不使用数据库,并且我不希望使用数据库,因为本练习中不需要数据库。我了解重新启动程序后,曲目将消失。

我在trackcontroller.cs的末尾已实例化了跟踪列表:

private static List<Track> trackList;

    public TrackController()
    {
        if(trackList == null)
        {
            trackList = DataProvider.GenerateDefaultTracks();
        }
    }

3 个答案:

答案 0 :(得分:3)

如果您的代码遵循标准模式,则每次在控制器中调用Create函数时,都会创建一个新的控制器。如果在构造函数中创建了对象trackList,则将为每次对Create的调用创建一个新的对象,给人的印象是什么都没发生。

答案 1 :(得分:1)

您的数据存储在变量中。此变量不是公共变量,因此除非您将其传递给视图,否则该变量将无法获得。

我建议您将跟踪列表存储在ViewBag中。这样可以从视图访问它。 现在,我不知道您如何实现跟踪列表,因此我仅举一个例子。

定义页面创建时间。

ViewBag.tracklist = new List<Track>();

在创建了轨道之后,您可以将其放在视图包中,如下所示:

ViewBag.trackList.Add(track);

您可以在视图中访问此数据,也可以将其传递给操作索引参数,例如:

return View(ViewBag.tracklist);

答案 2 :(得分:0)

我从未真正关闭过此设备,但事实证明我的视觉工作室已损坏。一切正常,因为我没有收到任何错误。重新安装Visual Studio解决了。