假设我有一个 HomeController,它有一个 Index 操作,在 Index.cshtml View 中我将回发到另一个 Controller (DocumentsController) 中的操作,操作完成后我重定向回 Home/Index。
维护用户在 Index.cshtml View 中提交的表单值的推荐/最干净的方法是什么?鉴于它是从另一个 Controller 重定向的?
编辑:我目前正在使用 RedirectToAction:
return RedirectToAction("Index", "Home");
那么使用这种方法如何保留表单值?
最佳答案
您可以将数据存储在 TempData
或 Session
中,调用 RedirectToAction
,然后从 TempData
检索值> 或再次 session
。
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
View 中使用它。然而,在那之后,所有临时数据都将被清除。
因此,例如,如果用户在重定向后多次刷新 Index
,则刷新期间临时数据将会丢失。如果这是 Not Acceptable ,则不要使用 TempData,而是将其保留在 Session 中。
关于asp.net-mvc - ASP.Net MVC - 在不同 Controller 之间保留表单值的推荐方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13249429/