MVC3是否需要在视图之间传递模型来维持状态?

本文关键字:模型 状态 是否 之间 视图 MVC3 | 更新日期: 2023-09-27 18:12:07

我有8个标记为Step0-Step7的页面,用于增量地将数据保存到称为dr405的模型中。在Step7之后,我需要显示一个Upload。它基于自定义配置文件提供程序的DR405Profile.CurrentUser.TangiblePRopertyID创建一个文件夹。所以,到目前为止,我没有从Step7到Upload.cshtml发布任何内容。后上传。我显示一个UploadSummary。cshtml,它只是基于DR405Profile.CurrentUser.TangiblePRopertyID列出位于目录中的文件。现在,我必须将用户带到一个review页面,该页面显示dr405模型的DB持久化数据。这是否意味着我必须通过Upload和UploadSummary传递模型即使这些页面不与模型交互?

我的计划是从

传递ID作为隐藏参数

step7→上传→UploadSummary→Review(id) <——post接受id作为参数。我不确定这是不是最好的办法。

重要

我想知道我是否可以对模型做同样的事情

Step7(模型)——比;Upload(model)—>UploadSummary(model)—>Review(id Or model)

public ActionResult Review(string id)
{
    var service = new DR405Service();
    var dr405 = db.dr405s.FirstOrDefault(d => d.TangiblePropertyId == id);

    return View(dr405);
}
    public ActionResult UploadSummary()
    {
        var saveLocation = Path.Combine(Server.MapPath("''"), "returns''" + DR405Profile.CurrentUser.TangiblePropertyId);
        ViewData["files"] = Directory.GetFiles(saveLocation).ToList() ;
        return View();
    }
    [HttpPost]
    public ActionResult Upload(HttpPostedFileBase uploadfile)
    {
        var saveLocation = Path.Combine(Server.MapPath("''"), "returns''" + DR405Profile.CurrentUser.TangiblePropertyId);
        System.IO.Directory.CreateDirectory(saveLocation);
        uploadfile.SaveAs(Path.Combine(saveLocation, Path.GetFileName(uploadfile.FileName)));
        ViewData["UploadStatus"] = String.Format("File name: {0}, {1}Kb Uploaded Successfully.", uploadfile.FileName, (int)uploadfile.ContentLength / 1024);
        return View();
    }

MVC3是否需要在视图之间传递模型来维持状态?

您有几个选项可以跨请求持久化数据。

你可以使用MVC的TempData特性。您可以使用TempData的Peek/Keep特性来保存它,直到您需要处理它(默认情况下,一旦数据被访问,它就会被删除)。

Session也可以工作,但不建议使用,因为在单元测试中比较难测试。

这很好。接受数据库条目的ID是标准做法。它需要更少的带宽,允许MVC更快地解析正确的路由/控制器/动作,并且不会给坏人太多的空间来发送恶意数据到你的服务器。