2

我有一个 ASP.NET MVC 4 应用程序。我对 ASP.NET MVC 4 比较陌生。目前,我正在尝试构建一个基本的任务列表应用程序。

public ActionResult Create()
{
  var model = new TaskModel();
  return View("~/Views/Task.cshtml", model);
}

[HttpPost]
public ActionResult Create(TaskModel model)
{
  if (model.TaskName.Length == 0)
  {
     // Display error message
  }
  else 
  {
    // Save to database
    // Write success message
  }
  return View("~/Views/Task.cshtml", model);
}

如果出现错误,我会在屏幕上显示错误消息。我的问题是,之前在视图中输入的值没有显示出来。整个视图是空白的。在这种情况下如何保留视图中的值?

谢谢!

4

1 回答 1

3

我为此使用 TempData。

public ActionResult Create()
{
  var model = new TaskModel();
  TempData["task"] = model;
  return View("~/Views/Task.cshtml", model);
}

[HttpPost]
public ActionResult Create()
{
  var task = (TaskModel)TempData["task"];
  UpdateModel(task);
  if (model.TaskName.Length == 0)
  {
     // Display error message
  }
  else 
  {
    // Save to database
    // Write success message
  }

  TempData["task"] = task;
  return View("~/Views/Task.cshtml", model);
}

MVC 的工作方式与 WebForms 不同,因为没有“控件”的概念,您必须自己保留状态。如果您不想使用 TempData,另一种选择是使用 LosFormatter 将您的控件序列化为隐藏的 HTML 字段。这将在 ASP.NET WebForms 中复制 ViewState 的功能

于 2013-01-29T18:01:14.637 回答