Asp.net mvc 从GET ActionResult到Post ActionResult保留ViewModel值的最佳方法是什么?

Asp.net mvc 从GET ActionResult到Post ActionResult保留ViewModel值的最佳方法是什么?,asp.net-mvc,Asp.net Mvc,假设您有一个ActionResult表单和一个Post ActionResult表单,并且您有一个不需要显示在视图中的值 public ActionResult Form() { FormModel formModel = new FormModel(); formModel.UploadRecordID = 99; return View(formModel); } [HttpPost] public A

假设您有一个ActionResult表单和一个Post ActionResult表单,并且您有一个不需要显示在视图中的值

    public ActionResult Form()
    {
        FormModel formModel = new FormModel();
        formModel.UploadRecordID = 99;
        return View(formModel);
    }

    [HttpPost]
    public ActionResult Form(FormModel formModel)
    {
        long recordID = formModel.UploadRecordID;
    }
保持这种价值的最佳方式是什么

一种方法是可以在视图中创建隐藏字段

    @Html.HiddenFor(model => model.UploadRecordID);

这是最好的方法吗?有没有其他方法可以做到这一点,如果有,优点和缺点是什么?

我认为您可以使用TempData,如:

TempData["formModel"] = formModel;
在行动后:

FormModel formModel = TempData["formModel"];

最好的是相当主观的。另一个选项是将其存储在会话中。与隐藏方法相比,这有一个优势,即用户无法操作隐藏的输入。另一方面,您可能会遇到其他问题,我个人不建议在这种情况下使用会话。一个更干净的选项是将ID保存到Get中的数据库中,并在Post中读取它(如果这是一个选项的话)。但是,如果您要在Get中生成UploadRecordID,并且不在视图中使用该值,为什么不在Post中生成它而不来回传递它呢?谢谢您的建议,同意尝试避免会话。至于UploadRecordID,为了澄清这一点,它是从url传入的,以便可以使用它获取记录并预填充一些值。但在发布后,我们需要在发布后对该记录执行其他后期处理操作。