我有一个名为UploadFile的mvc页面及其操作和视图。在我的操作中,我使用TempData从一个发送到另一个,以便在刷新视图时重用我的excel列表。它从第一页到第二页网格时都有效。然而,在第二次刷新之后,tempdata消失了,我再次得到一个空网格。
如何传递和重复使用我的TempData,直到传递另一个视图/动作。
[HttpGet]
public ActionResult UploadFile()
{
return View("UploadFile", TempData["Veri"]);
}
[HttpPost]
public ActionResult UploadFile(HttpPostedFileBase file)
{
try
{
string _FileName = string.Empty;
string _path = string.Empty;
List<ImportExcelDto> listExcel = new List<ImportExcelDto>();
if (file.ContentLength > 0)
{
_FileName = Path.GetFileName(file.FileName);
_path = Path.Combine(Server.MapPath("~/App_Data/uploads"), _FileName);
string tempfolder = Server.MapPath("~/App_Data/uploads");
var fileGeneration = new DirectoryInfo(Server.MapPath("~/App_Data/uploads"));
fileGeneration.GetFiles("*", SearchOption.AllDirectories).ToList().ForEach(f => f.Delete()); //Directory'deki eski excel dosyalarını temizler
file.SaveAs(_path);
}
ViewBag.Message = "Dosya Başarıyla Aktarıldı!";
DataTable dt = Helpers.GetDataTableFromExcel(_path, true);
for (int i = 0; i < dt.Rows.Count; i++)
{
ImportExcelDto item = new ImportExcelDto() { KartNo = dt.Rows[i][0].ToString(), Tutar = dt.Rows[i][1].ToDecimal() };
listExcel.Add(item);
}
var TempDataVeri = listExcel;
TempData["Veri"] = TempDataVeri;
return View("UploadFile", listExcel);
}
catch (Exception ex)
{
ViewBag.Message = "Dosya Aktarılamadı!";
return View();
}
}
答案 0 :(得分:4)
使用PEEK
和object value = TempData.Peek("value");
object value = TempData["value"];
//later on decide to keep it
TempData.Keep("value");
示例:
TempData
这将帮助您保留数据以获得超过1次访问/请求。
通常一旦您访问Peek
,它就会被删除
如果您希望保留其他请求的值,则可以使用Keep
。保留值时使用Owner="System.Windows.Application.Current.MainWindow"
取决于其他逻辑。
答案 1 :(得分:0)
TempData
会保留HTTP Request
时间的信息。这仅意味着从一个页面到另一个页面。这也适用于302/303重定向,因为它位于相同的HTTP Request
中。当您从一个控制器移动到另一个控制器或从一个操作移动到另一个操作时,它有助于维护数据。
您可以使用Session
长时间保留该值。
Session["Veri"] = TempDataVeri;