You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在Razor Pages中使用JavaScript更新局部视图的问题

你遇到的问题很典型:后端已经正确处理了搜索过滤逻辑,也返回了对应的Partial视图HTML,但前端没有编写代码来把这个返回结果替换到页面的godContainer里。下面是具体的修复方案:

第一步:修改Ajax请求,添加成功回调

你的Gods.js里的Ajax请求只完成了“发送请求给后端”这一步,没有处理后端返回的响应。我们需要添加success回调函数,把返回的Partial视图HTML替换到页面的目标容器中,同时还要调整dataTypehtml(因为后端返回的是HTML,不是JSON):

let txtSearchGod = document.getElementById("txtSearchGod");
function SearchGod() {
    $.ajax({
        type: "POST",
        url: '../../Gods?handler=SearchGod',
        beforeSend: function (xhr) {
            xhr.setRequestHeader("XSRF-TOKEN", $('input:hidden[name="__RequestVerificationToken"]').val());
        },
        data: JSON.stringify(txtSearchGod.value),
        contentType: "application/json",
        dataType: "html", // 这里要改成html,匹配后端返回的内容类型
        success: function(response) {
            // 把后端返回的Partial视图HTML替换到godContainer里
            $('.godContainer').html(response);
        },
        // 可选:添加错误处理,方便排查问题
        error: function(xhr, status, error) {
            console.error('搜索请求出错了:', error);
            console.log('后端返回的内容:', xhr.responseText);
        }
    });
}

第二步:修复jQuery引入顺序

我注意到你在Index.cshtml里先引入了Gods.js,再引入jQuery——这会导致$未定义的错误!因为Gods.js依赖jQuery,所以必须先加载jQuery:

<!-- 先加载jQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<!-- 再加载依赖jQuery的Gods.js -->
<script src="~/js/Gods.js"></script>

可选优化:使用Razor生成正确的请求URL

硬编码的URL../../Gods?handler=SearchGod在某些路由场景下可能失效,推荐用Razor语法生成正确的URL,避免路径错误:

// 替换原来的url行
url: '@Url.Page("/Gods", "SearchGod")',

为什么这样能解决问题?

当用户输入搜索内容时,Ajax请求发送到后端的OnPostSearchGodAsync方法,后端处理后返回过滤后的_GodsPartial视图HTML。然后success回调会把这个HTML替换到页面的.godContainer容器中,实现页面内容的动态更新。

做完这些修改后,你的搜索功能应该就能正常更新页面内容了!

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

火山引擎 最新活动