【问题标题】:MVC3 View Update IssueMVC3 视图更新问题
【发布时间】:2012-12-28 15:05:52
【问题描述】:

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

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

【问题讨论】:

  • 您能发布您的查看代码吗?我想看看 UploadPhoto 的 PartialView 去哪里了。
  • @IronMan84 - 更新了问题。

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


【解决方案1】:

您没有重定向到 UploadPhoto 操作。

使用RedirectToAction("UploadPhoto"); 进行重定向。

另外,您可以尝试调试代码以检查您的AlbumManager 是否没有缓存您的数据或没有执行删除。

【讨论】:

  • 忘了说了,我也试过了,但是没用。照片正在删除。如果我手动刷新页面,它工作正常。
  • 您在响应中看到已删除的图像吗?签入 FireBug。您是否正确更新了 javascript 中的页面?
  • 我在图像上附加了 Guid,我可以在萤火虫中观察到所有图像都具有以前的GUID,这意味着没有任何更新!
  • 好吧,在回复中我得到了最新的结果。肯定是绑定有问题。感谢您的提示。
【解决方案2】:

您在 UploadPhoto 中返回一个 PartialView,但您的表单实际上并没有以 DOM 对象为目标来使用该 PartialView 的结果进行更新。我建议切换到Ajax.BeginForm(),并在您的 AjaxOptions 中包含您要更新的 DOM 对象的名称。如需更多信息,请尝试查看at this page

【讨论】:

  • 听起来不错,会尝试让您知道。
【解决方案3】:

我认为 MVC 正在缓存第一种方法的操作输出。您应该查看OutputCache 的文档,您可以尝试设置NoStore 属性,如果这不起作用,也许Duration 为0 会阻止缓存?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多