这是一个将图像设置为ViewBag
以进行显示的操作。
public ActionResult UploadPhoto()
{
List<string> images = new List<string>();
foreach (var file in Directory.GetFiles(AlbumManager.GetAlbumName(SessionManager.CurrentSession.PropertyId, true)))
{
images.Add(Server.RelativePath(file));
}
ViewBag.Images = images;
return PartialView("UploadPhoto");
}
这是一个用于删除所选图像的帖子操作。
[HttpPost]
public ActionResult DeletePhoto(string imageName)
{
AlbumManager.DeletePhoto(SessionManager.CurrentSession.PropertyId, imageName);
return UploadPhoto();
}
如您所见,删除完成后,我将其重定向到UploadPhoto
操作,该操作必须打印当前存在的图像。但在回发后,删除的图像仍然显示。我对此行为非常不确定。请帮我解决这个问题。
我尝试使用以下代码清除DeletePhoto
操作中的模型状态,但没有用。
ModelState.Clear();
我的观点:
@using (Html.BeginForm("DeletePhoto", "Add", FormMethod.Post, new { id = "PhotoDelete" }))
{
<input type="hidden" name="imageName" id="imageName" />
<div class="thumnailsBox">
@foreach (var image in ViewBag.Images)
{
<div class="thumnailTails">
<span class="thumbimage">
<input id="imageSubmit" type="image" alt="No Image" src="@Url.Content(image)" /></span>
</div>
}
</div>
}
除IronMan84的答案外,这是我问题的实际解决方案:
[HttpPost]
public ActionResult DeletePhoto(string imageName)
{
AlbumManager.DeletePhoto(SessionManager.CurrentSession.PropertyId, imageName);
return JavaScript("location.reload(true)");
}
我正在渲染一个脚本来重新加载页面。
答案 0 :(得分:5)
您没有重定向到UploadPhoto
操作。
使用RedirectToAction("UploadPhoto");
重定向。
此外,您可以尝试调试代码以检查AlbumManager
是否未缓存数据或执行删除。
答案 1 :(得分:1)
我认为MVC正在缓存第一种方法的动作输出。您应该查看OutputCache的文档,您可以尝试设置NoStore
属性,如果这不起作用,那么{0}的Duration
可能会阻止缓存吗?
答案 2 :(得分:1)
您正在UploadPhoto中返回PartialView,但您的表单实际上并未将DOM对象定位为使用该PartialView的结果进行更新。我建议切换到Ajax.BeginForm()
,并在您的AjaxOptions中,包括您要更新的DOM对象的名称。有关详细信息,请尝试查看at this page。