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

时间:2011-10-24 14:12:49

标签: c# asp.net-mvc-3 model razor

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

我的计划是将ID作为隐藏参数从

传递

步骤7 - >上传 - > UploadSummary - > Review(id)< - post接受ID作为参数。我不确定这是不是最好的方式。

重点

我想了解我是否可以对模型做同样的事情

步骤7(模型) - >上传(模型) - > UploadSummary(模型) - >评论(ID或模型)

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();
    }

2 个答案:

答案 0 :(得分:2)

您可以选择在请求之间保留数据。

您可以使用MVC TempData功能。您可以使用TempData的Peek / Keep功能将其保留,直到您需要处理它为止(默认情况下,一旦访问数据,它就会被删除)。

会话也可以,但由于在单元测试中难以测试,因此不建议使用。

答案 1 :(得分:1)

这很好。获取数据库条目的ID是标准做法。它需要更少的带宽,允许MVC更快地解决正确的路由/控制器/操作,并且不会给坏人提供将恶意数据发送到服务器的大量表面。