MVC3查看更新问题

时间:2012-12-28 15:05:52

标签: asp.net-mvc-3 image modelstate

这是一个将图像设置为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)");
}

我正在渲染一个脚本来重新加载页面。

3 个答案:

答案 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