[英]Model on the razor view is not getting updated on form submit
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列表。 但是,“發布后視圖”並沒有刷新。 我的意思是Index上的表不會隨着新的model元素刷新。 一旦返回View(“ Index”,model)被激發,即使document.ready也不會被調用。
I have tried ModelState.Clear(). It didn't work.
您不能從單個HTTP請求返回兩個不同的響應。
在這里,您正在編寫響應:
Response.OutputStream.Write(writeBuffer, 0, count);
之后,您所做的任何事情都不會由服務器或客戶端處理。
您的網絡瀏覽器正在下載文件,而不僅僅是停留在同一頁面上。 那絕對是正常的。
如果要刷新頁面,則可能需要使用JavaScript客戶端進行刷新。
這是一個使用jQuery並假設myForm
作為表單ID的小示例:
$('#myForm').submit(function() {
setTimeout(function () {
window.location.reload();
}, 1000); // use a timeout as big as you need
});
您可能還需要將target="_blank"
到您的表單標簽中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.