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();
}
您有几个选项可以跨请求持久化数据。
你可以使用MVC的TempData特性。您可以使用TempData的Peek/Keep特性来保存它,直到您需要处理它(默认情况下,一旦数据被访问,它就会被删除)。
Session也可以工作,但不建议使用,因为在单元测试中比较难测试。
这很好。接受数据库条目的ID是标准做法。它需要更少的带宽,允许MVC更快地解析正确的路由/控制器/动作,并且不会给坏人太多的空间来发送恶意数据到你的服务器。