我的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();
}
}
答案 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解决了。