3

假设我有一个 HomeController,它有一个 Index 操作,在 Index.cshtml 视图中我将回发到另一个控制器 (DocumentsController) 中的操作,在操作完成后我重定向回 Home/Index。

维护用户在 Index.cshtml 视图中提交的表单值的推荐/最干净的方法是什么?鉴于它是从另一个控制器重定向的?

编辑:我目前正在使用 RedirectToAction:

return RedirectToAction("Index", "Home");

那么使用这种方法如何保留表单值?

4

1 回答 1

3

您可以将数据存储在TempDataor中Session,调用RedirectToAction,然后从TempDataorSession再次检索值。

TempData很特别。它将内容存储在 Session 中,但是,通过存储的数据TempData仅保留用于当前请求和后续请求。之后,数据被丢弃。这听起来很适合您的需求,但如果您需要数据保留更长时间,只需使用 Session。

public class HomeController : Controller
{
    public ActionResult Index()
    {
         var someData = TempData["SomeData"] as string; // can be anything, using a string as an example;

         return View(someData);
    }
}

public class DocumentsController : Controller
{
    public ActionResult DoSomething()
    {
        TempData["SomeData"] = "Hello, world!";

        return RedirectToAction("Index", "Home");
    }
}

当您第一次访问时Home/Index"SomeData"将丢失(null)。当您访问 时Documents/DoSomething,它将设置"SomeData"为一个字符串,然后将您重定向到Home/Index. 此时,Index将看到我们放置的字符串"SomeData",您可以在Index视图中使用它。但是,在那之后,所有临时数据都将被清除。

因此,例如,如果用户Index在重定向后多次刷新,则在刷新期间临时数据将丢失。如果这不可接受,则不要使用 TempData,而是将其保留在 Session 中。

于 2012-11-06T11:09:28.620 回答