我正在尝试使用MVC 5构建一个网站。 我有一个包含3个变量的控制器类。
tar zcvf test1.tar.gz -C ./tar_dir .
tar zcvf test2.tar.gz -C ./tar_dir -T /file_list.txt
第一个被调用的方法是
function addZero(i) {
if (i < 10) {
i = "0" + i;
}
return i;
}
var d = new Date();
var h = addZero(d.getHours());
var m = addZero(d.getMinutes());
console.log(h + ":" + m )
这里,存储了viewModel数据类型的值。 然后将viewModel传递给View。 视图返回另一种类型的变量并调用另一种方法。
public class WorkerController : Controller
{
public ViewModel viewModel = new ViewModel();
private WorkerDB Wdb = new WorkerDB();
private ProjectDB Pdb = new ProjectDB();
在此方法中,viewModel为null,我不明白为什么。
被调用的视图:
public ActionResult Index(User user)
{
viewModel.User = user;
viewModel.ProjectsList = Pdb.DbSet.ToList();
viewModel.WorkerList = Wdb.DbSet.ToList();
return View(viewModel);
}
全班:
[HttpPost]
public ActionResult StartStopTime(Worker worker)
{
return RedirectToAction("Index", viewModel);
}
如果有人可以告诉我在哪里找到答案。谢谢!
答案 0 :(得分:0)
如果您需要在请求之间保留数据,则应使用TempData
:
public ActionResult Index(User user)
{
var viewModel = new ViewModel();
viewModel.User = user;
viewModel.ProjectsList = Pdb.DbSet.ToList();
viewModel.WorkerList = Wdb.DbSet.ToList();
TempData["MyViewModel"] = viewModel;
return View(viewModel);
}
当您执行下一个请求时(例如下面的帖子请求),您可以检索它:
[HttpPost]
public ActionResult StartStopTime(Worker worker)
{
var viewModel = TempData["MyViewModel"] as ViewModel;
return RedirectToAction("Index", viewModel);
}
当您从TempData
读取数据时请注意,该值已标记为删除,并且在下一个请求时将无法使用(在您的情况下为第三个请求)。如果你想在下一个请求中读取数据并使其保持活动状态,你可以这样做:
[HttpPost]
public ActionResult StartStopTime(Worker worker)
{
var viewModel = TempData.Peek("MyViewModel") as ViewModel;
return RedirectToAction("Index", viewModel);
}
使用Peek()
时,TempData
中存储的值不会被标记为删除。