これは、表示する画像を設定するアクション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)");
}
ここでページをリロードするスクリプトをレンダリングしています。