asp.net-mvc - ASP.Net MVC - 在不同 Controller 之间保留表单值的推荐方法是什么?

标签 asp.net-mvc forms controller

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

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

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

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

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

最佳答案

您可以将数据存储在 TempDataSession 中,调用 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/

相关文章:

asp.net - 将 MVC 用于 Webforms 项目的新部分

jquery - ASP.NET MVC : Values sent by jQuery ajax is not being bound to the view model by the action

asp.net - 如何在 Controller 代码中使用 Url.Content ("~\stuff\hi.jpg")?

javascript - 为什么我的 javascript 没有运行/邮件没有发送?

jquery - 表单提交时获取所有已检查的 iCheck 输入值

javascript - 如何在 Angular Controller 中拥有两个 $scoped 变量?

spring-mvc - 哪个更好,在 spring3 Controller 上返回 "ModelAndView"或 "String"

c# - 将左列添加到 MVC Net Core 元素模板 View 中,该 View 会随着用户向下滚动而消失

javascript - 如何在不提交表单的情况下使用 jquery ajax 发送表单数据?

node.js - 无法在nodejs中返回请求方法的主体