You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# Ajax-PartialView替换整页异常:下拉操作后按钮触发问题

我来帮你排查这个问题的根源,以及给出对应的解决办法:

问题分析

你的核心问题出在DOM更新后Unobtrusive AJAX的绑定失效:

  • 首次加载页面时,Unobtrusive会自动解析表单的data-ajax等属性并绑定AJAX提交事件,这时候点击按钮能正常局部刷新。
  • 但当下拉框触发AJAX替换#header区域后,页面DOM发生了变更(如果表单或按钮在这个区域内的话),原来的Unobtrusive绑定会丢失;就算表单不在替换区域,你动态给表单添加data-ajax属性后,Unobtrusive也不会自动重新识别这些新属性,导致后续点击按钮时,表单走了默认的整页提交流程。

解决方案1:重新初始化Unobtrusive绑定(适合保留原有逻辑)

在下拉框的AJAX成功回调里,手动触发Unobtrusive的重新解析,确保DOM更新后绑定依然有效:

$(document).on("change", ".RefreshList", function () {
  $.ajax({
    type: "POST",
    url: "@Url.Action("RefreshList", "Feuillet")",
    data: $("#form0").serialize(),
    success: function (response) {
      $('#header').html(response);
      // 关键:重新初始化Unobtrusive AJAX和验证
      $.validator.unobtrusive.parse("#form0");
      $('form[data-ajax="true"]').data("unobtrusiveAjax", null);
      $.ajaxUnobtrusive.parse('form[data-ajax="true"]');
    },
  });
});

解决方案2:手动发起AJAX(更稳定,推荐)

其实可以完全绕开Unobtrusive的绑定问题,直接在按钮点击时用原生jQuery AJAX发起请求,流程更可控:

$("button[value='ContractSearch']").click(function (e) {
  // 阻止默认表单提交行为,避免整页刷新
  e.preventDefault();
  $("#modalMessage").modal('show');
  
  $.ajax({
    type: "POST",
    url: "@Url.Action("Creation" + Model.TypeProduit, "Feuillet")",
    data: $("#form0").serialize(),
    success: function(response) {
      // 替换目标区域内容
      $('#header').html(response);
      // 执行原本在data-ajax-success里的函数
      AjaxFunction();
    },
    complete: function() {
      // 可以在这里处理模态框隐藏等收尾逻辑
      $("#modalMessage").modal('hide');
    }
  });
});

额外注意点

  • 如果你的按钮是type="submit",一定要加上e.preventDefault()阻止默认提交行为,否则很容易触发整页刷新。
  • 检查#form0是否在#header区域内:如果是的话,每次下拉框AJAX都会替换表单,这时候需要用事件委托(比如$(document).on("submit", "#form0", function(){...}))来处理表单提交,避免绑定丢失。

内容的提问来源于stack exchange,提问作者Steeven Diard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:24:49