C# 使用TempData
我有一个名为UploadFile的mvc页面,上面有他们的操作和视图。在我的操作中,我使用TempData从一个发送到另一个,以便在刷新视图时重用我的excel列表。它在从网格的第一页转到第二页时起作用。然而,在第二次刷新之后,tempdata消失了,我又得到了一个空的网格 在通过另一个视图/操作之前,如何保存和重用TempDataC# 使用TempData,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我有一个名为UploadFile的mvc页面,上面有他们的操作和视图。在我的操作中,我使用TempData从一个发送到另一个,以便在刷新视图时重用我的excel列表。它在从网格的第一页转到第二页时起作用。然而,在第二次刷新之后,tempdata消失了,我又得到了一个空的网格 在通过另一个视图/操作之前,如何保存和重用TempData [HttpGet] public ActionResult UploadFile() { r
[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();
}
}
[HttpGet]
公共操作结果上载文件()
{
返回视图(“上传文件”,TempData[“Veri”]);
}
[HttpPost]
公共操作结果上载文件(HttpPostedFileBase文件)
{
尝试
{
string _FileName=string.Empty;
string _path=string.Empty;
List listExcel=新列表();
如果(file.ContentLength>0)
{
_FileName=Path.GetFileName(file.FileName);
_path=path.Combine(Server.MapPath(“~/App\u Data/uploads”),\u文件名);
字符串tempfolder=Server.MapPath(“~/App_Data/uploads”);
var fileGeneration=newdirectoryinfo(Server.MapPath(“~/App_Data/uploads”);
fileGeneration.GetFiles(“*”,SearchOption.AllDirectories).ToList().ForEach(f=>f.Delete());//目录'deki-eski-excel-dosyalarınıtemizler
file.SaveAs(_路径);
}
Message=“Dosya Başarıyla Aktarıldı!”;
DataTable dt=Helpers.GetDataTableFromExcel(_path,true);
对于(int i=0;i
TempData
保留HTTP请求时的信息。这意味着只能从一页到另一页。这也适用于302/303重定向,因为它位于相同的HTTP请求中。当您从一个控制器移动到另一个控制器或从一个操作移动到另一个操作时,它有助于维护数据
您可以使用会话
长时间保留该值
Session["Veri"] = TempDataVeri;
使用KEEP
和PEEK
例如:
object value = TempData.Peek("value");
object value = TempData["value"];
//later on decide to keep it
TempData.Keep("value");
这将有助于您为一次以上的访问/请求保留数据
通常,一旦访问TempData
它就会被删除
当您始终希望为另一个请求保留值时,可以使用Peek
。保留值时使用Keep
取决于附加逻辑。我不明白为什么要多次使用临时数据?您可以在post函数之外提取对象实例化,但这将通过验证过程,多个客户端可能会混淆相同的对象。我想在我回答问题之前,您需要告诉我们了解您的最终目标。最好为多个请求保留tempdata,但他希望为多个请求保留数据。是的,您也可以为多个请求使用tempdata是的,但他面临tempdata
和会话的问题mvc的想法是删除他们创建viewbag、viewdata和tempdataIt的原因,伙计。非常感谢您的帮助和快速回复!我把它标记为mate,但是我不能更新你的答案,因为我的帐户是新的。谢谢你提供的peek keep信息。没关系:)很高兴能帮上忙