public ActionResult Index(int id, string name)
{
var model = new ITViewModel
{
Packages = _Repository.GetDeployedPackages(id)
};
return View(model);
}
[HttpPost]
public ActionResult GeneratePackage(ITViewModel model)
{
_Repository.SavePackage(model);
//Generate Zip file Package
//Get file template in archiveStream
Response.Clear();
Response.ContentType = "application/zip";
Response.AppendHeader("content-disposition", "attachment; filename="testzipPackage");
Response.CacheControl = "Private";
Response.Cache.SetExpires(DateTime.Now.AddMinutes(3));
Response.Buffer = true;
var writeBuffer = new byte[4096];
var count = archiveStream.Read(writeBuffer, 0, writeBuffer.Length);
while (count > 0)
{
Response.OutputStream.Write(writeBuffer, 0, count);
count = archiveStream.Read(writeBuffer, 0, writeBuffer.Length);
}
model.Packages = _Repository.GetDeployedPackages(model.id) //get the correct package list with the one tht we just saved on this ActionResult
return View("Index",model);
}
//Index
@model ITViewModel
@using (Html.BeginForm("GeneratePackage", "Integration", FormMethod.Post)
{
//some input form
}
<table>
@foreach (var package in Model.Packages)
{
<tr>
<td>
@package.Name
</td>
</tr>
}
</table>
我能夠正確下載zip文件。在調試器中,我還會看到帶有新添加元素的Package列表。但郵政觀點沒有得到刷新。我的意思是索引上的表格不會使用新的模型元素進行刷新。即使document.ready沒有被調用一次 返回View(「Index」,model)被觸發。剃刀視圖上的模型沒有得到表單提交更新
I have tried ModelState.Clear(). It didn't work.
您不能一次執行兩個HTTP響應。內容是'text/html'(用於視圖)或'application/zip'(用於下載),但不能同時爲兩者。您將需要做其他事情,例如返回視圖,然後通過javascript啓動下載。 –
@PaulAbbott wat是爲此而工作的?我需要用戶下載壓縮文件。但我也希望他們看到更新的列表..我可以強制頁面在sedning zip後刷新 – Scorpio
解決方法是返回視圖,然後通過JavaScript啓動下載。您需要製作第二個控制器操作,下載文件並通過JavaScript調用該操作。您無法先下載,然後刷新頁面,因爲下載只是文件傳輸,在下載完成後無法包含「說明」以執行其他任何操作。 –