【发布时间】:2017-12-20 10:01:19
【问题描述】:
我正在尝试使用 MVC 5 构建网站。 我有一个带有 3 个变量的控制器类。
public class WorkerController : Controller
{
public ViewModel viewModel = new ViewModel();
private WorkerDB Wdb = new WorkerDB();
private ProjectDB Pdb = new ProjectDB();
第一个被调用的方法是
public ActionResult Index(User user)
{
viewModel.User = user;
viewModel.ProjectsList = Pdb.DbSet.ToList();
viewModel.WorkerList = Wdb.DbSet.ToList();
return View(viewModel);
}
这里存储了 viewModel 数据类型的值。 然后将 viewModel 传递给 View。 视图返回另一种类型的变量并调用另一种方法。
[HttpPost]
public ActionResult StartStopTime(Worker worker)
{
return RedirectToAction("Index", viewModel);
}
在这个方法里面,viewModel 是空的,我不明白为什么。
被调用的视图:
@using System
@using WebApplication2.Models
@using WebApplication2.ViewModels
@model ViewModel
@{
Worker worker = new Worker();
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Worker</title>
</head>
<body>
<div>
@foreach(var i in Model.WorkerList)
{
if ((i.Nume == Model.User.Username) && (i.Prenume == Model.User.Password))
{
worker = i;
break;
}
}
<br />
</div>
<div>
Salut @Model.User.Username
@foreach (var item in Model.ProjectsList)
{
<br>
@item.Numar
}
</div>
<br />
<br />
<form action="/Worker/StartStopTime" method="post">
<input type="hidden" name="ID" value="@worker.ID" />
<input type="hidden" name="Nume" value="@worker.Nume" />
<input type="hidden" name="Prenume" value="@worker.Prenume" />
<input type="text" name="Proiect" value="" required />
<input type="hidden" name="Start" value="@DateTime.Now.ToString()" />
<input type="hidden" name="Stop" value="@DateTime.Now.ToString()" />
<input type="submit" name="submit" value="Start/Stop" />
</form>
全班:
public class WorkerController : Controller
{
public ViewModel viewModel = new ViewModel();
private WorkerDB Wdb = new WorkerDB();
private ProjectDB Pdb = new ProjectDB();
// GET: Worker
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);
}
}
如果有人可以告诉我在哪里可以找到答案。谢谢!
【问题讨论】:
-
public ActionResult StartStopTime(Worker worker) { return RedirectToAction("Index", viewModel); }...viewModel未在此方法中定义或填充。不要忘记 HTTP 是无状态的,变量值不会在请求之间持续存在,除非您将它们存储在某个地方。 -
非常感谢您的回答,帮助很大!
标签: c# .net asp.net-mvc asp.net-mvc-5