这是我保存用户输入然后重定向到查看模式的操作方法:
[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
方法时,我可以看到Attachment不为null。但是一旦传递给ViewDocumentCitizen
方法,它就会被设置为null。如何通过重定向保持文件属性值?
答案 0 :(得分:1)
我认为问题是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}})));
}
或更好
return RedirectToAction(actionName: "ViewDocumentCitizen", routeValues: new { doc = documentCitizen});
这应该有助于您的ModelBinder按名称识别参数
修改强>
来自MSDN“Controller.RedirectToAction”
返回对浏览器的HTTP 302响应,这会导致浏览器向指定的操作发出GET请求。
获取方法有一个长度限制,请阅读更多HERE
但.Net Framework已准备好应对所有事情,并且他们创建了ControllerBase.TempData属性,在MSDN
上阅读更多内容希望它能帮到你