【问题标题】:Ajax.BeginForm - How to access new DOM objects from PartialView?Ajax.BeginForm - 如何从 PartialView 访问新的 DOM 对象?
【发布时间】:2026-02-06 07:25:01
【问题描述】:

我有以下 div,它正在加载部分视图

<div id="_customerForm">
            @Html.Partial("~/Views/Customer/_customerForm.cshtml", Model.customerForm)
</div>

在那个部分视图中我有 Ajax 表单

@using (Ajax.BeginForm("UpdateCustomer",
        "Customer",
         new AjaxOptions()
         {
               HttpMethod = "POST",
               InsertionMode = InsertionMode.Replace,
               UpdateTargetId = "_customerForm",
         }
))
{
...
}

当我提交 Ajax 表单时,会重新生成部分视图,包括 Ajax 表单(通过来自服务器的新模型)

我面临的问题是我将 jquery 事件附加到该表单的输入之一,该输入有效,直到刷新表单。例如

$("#CustomerAddressList").change(function () { ... });

#CustomerAddressList DOM 上的更改事件一直有效,直到 #CustomerAddressList 被新的 PartialView 模型刷新,知道吗?

【问题讨论】:

  • 一种选择是将您的 jQuery 绑定更改为类似$("body").on("change", "#CustomerAddresslist", function() {}); 的内容。即使元素被删除并重新创建,这也会导致绑定获取更改。您还可以将 "body" 替换为更具体的选择器和元素的父级

标签: jquery ajax asp.net-mvc


【解决方案1】:

使用

$(document).on("change", "#CustomerAddressList", function(){
...
});

$("body").on("change", "#CustomerAddressList", function(){
...
});

因为监听器绑定到页面上的一个持久元素,所以选择器引用的项目是否是动态内容并不重要。

.on documentation.

【讨论】:

  • document 不起作用,但 body 起作用,谢谢!
  • 已修复,文档不需要语音标记 - 很高兴为您提供帮助,您可以更具体地提高性能,但正文和文档将始终有效