【问题标题】:MVC AJAX action link not updating properlyMVC AJAX 操作链接未正确更新
【发布时间】:2026-01-26 00:25:01
【问题描述】:

我在使用 AJAX 操作链接时遇到了一些问题。每当单击链接时,UpdateTargetID 容器不会更新,除非该链接被单击两次(这会在第二次单击时引发异常,因为该项目已被删除;在此异常之后,页面会更新)。

此外,在第一次更新时,整个页面会重新加载到自身中,有点像 iframe。我有一个简单的 3 列布局(标题、左侧菜单、右侧内容),整个网页在右侧内容部分重新呈现。但只有一次。随后的操作链接点击不会递归地呈现页面本身。

我将以下代码用于 AJAX 图像链接(可在此处找到:ASP.NET MVC Ajax.ActionLink with Image):

 public static class ImageActionLinkHelper
{
    public static string ImageActionLink(this AjaxHelper helper, string imageUrl, string altText, string actionName, object routeValues, AjaxOptions ajaxOptions)
    {
        var builder = new TagBuilder("img");
        builder.MergeAttribute("src", imageUrl);
        builder.MergeAttribute("alt", altText);
        var link = helper.ActionLink("[replaceme]", actionName, routeValues, ajaxOptions);
        return link.ToString().Replace("[replaceme]", builder.ToString(TagRenderMode.SelfClosing));
    }
}

这是我在 .aspx 中的操作链接:

<%= Ajax.ImageActionLink("../../content/imgs/delete_icon.png", "Delete error", "Delete", new { id = new Guid(item.ErrorId.ToString()) }, new AjaxOptions { Confirm = "Delete?", UpdateTargetId="errors" }) %>

“errors”是我要更新的id

        [HttpPost]
        public ActionResult Delete(Guid id)
    {
        var error = db.ELMAH_Error.FirstOrDefault(x => x.ErrorId == id);

        db.DeleteObject(error);
        db.SaveChanges();

        return PartialView();
    }

【问题讨论】:

    标签: asp.net-mvc asp.net-ajax


    【解决方案1】:

    您似乎正在渲染整个视图。因此会生成无效的标记 - 重复的正文标记等。在处理 Ajax 场景时使用部分视图。

    【讨论】:

    • 谢谢,正在研究实现部分。这确实解决了重复问题(现在在控制器中使用 return PartialView() 而不是 RedirectToAction),但是页面不会异步更新。删除确实是异步发生的,但它只是没有在视觉上反映出来。有什么想法吗?