Asp.net mvc 4 在RedirectToAction方法内传递模型时,上载的文件将丢失
这是我保存用户输入,然后重定向到查看模式的操作方法:Asp.net mvc 4 在RedirectToAction方法内传递模型时,上载的文件将丢失,asp.net-mvc-4,redirect,file-upload,Asp.net Mvc 4,Redirect,File Upload,这是我保存用户输入,然后重定向到查看模式的操作方法: [HttpPost] public ActionResult SaveDocumentCitizen(DocumentCitizen documentCitizen) { DocumentCitizenRepository repository = new DocumentCitizenRepository(); repository.SaveDocument(documentCitizen); return Redi
[HttpPost]
public ActionResult SaveDocumentCitizen(DocumentCitizen documentCitizen)
{
DocumentCitizenRepository repository = new DocumentCitizenRepository();
repository.SaveDocument(documentCitizen);
return RedirectToAction(actionName: "ViewDocumentCitizen", routeValues: new RouteValueDictionary(documentCitizen));
}
下面是ViewDocumentCitizen操作方法:
public ActionResult ViewDocumentCitizen(DocumentCitizen doc)// The Attachment value is null here
{
DocumentCitizenRepository repository = new DocumentCitizenRepository();
DocumentCitizen docCitizen = repository.UpdateTextualValues(doc.DocID);
return View(viewName: "DocumentCitizen", model: docCitizen);
}
DocumentCitizen模型具有以下属性:
public byte[] Attachment{get;set;}
我选择一个文件,然后提交表单,然后在调试
SaveDocumentCitizen
方法时,我可以看到附件不是空的。但一旦传递给ViewDocumentCitizen
方法,它就会被设置为null。要通过重定向保持文件属性值,我必须做些什么?我认为问题在于RouteData中的参数名和Action方法中的参数名不相等。尝试修改您的SaveDocumentCitizen
操作
[HttpPost]
public ActionResult SaveDocumentCitizen(DocumentCitizen documentCitizen)
{
DocumentCitizenRepository repository = new DocumentCitizenRepository();
repository.SaveDocument(documentCitizen);
return RedirectToAction(actionName: "ViewDocumentCitizen", routeValues: new RouteValueDictionary(new RouteValueDictionary(new Dictionary<string, object> {{"doc", documentCitizen}})));
}
这将有助于ModelBinder按名称识别参数
编辑:
从MSDN“Controller.RedirectToAction”
向浏览器返回HTTP 302响应,这会导致浏览器对指定操作发出GET请求
Get方法有长度限制,请阅读详细信息
但是.Net Framework已经准备就绪,他们创建了ControllerBase.TempData属性,请阅读更多
希望它能帮助您尝试改用httppostedfilebase…我扩展了ByteArrayModelBinder,将httppostedfilebase转换为byte[]。请查看此链接以了解如何更改。这样,参数本身将变为null。RedirectToAction将发送[GET]请求,可能是您的字节数组太大了?如果是这样的话,那么使用它为此创建的TempData存储
return RedirectToAction(actionName: "ViewDocumentCitizen", routeValues: new { doc = documentCitizen});