在ASP.NET MVC 4中保留模型

时间:2013-01-29 17:50:49

标签: asp.net-mvc-4

我有一个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);
}

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

谢谢!

1 个答案:

答案 0 :(得分: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功能