为什么自定义类型变量不是保存值MVC

时间:2017-12-20 10:01:19

标签: c# .net asp.net-mvc asp.net-mvc-5

我正在尝试使用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);
}

如果有人可以告诉我在哪里找到答案。谢谢!

1 个答案:

答案 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中存储的值不会被标记为删除。