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

Razor页面中通过JavaScript读取表单控件值失败问题求助

问题原因及解决方案

1. debugger断点未触发的原因

你代码中的debugger语句包裹在if (searchString != "" || selectedPorts.length != 0)的条件判断内,页面首次加载调用loadTable()时,输入框默认为空、下拉框也没有选中项,条件不满足,所以不会进入该分支触发断点。你只需选中任意端口或者在输入框填写内容后再调用loadTable(),断点即可正常触发。

2. 请求参数为空的核心原因

你混淆了jQuery的$.ajax和原生fetch的API用法:

  • jQuery的AJAX请求可以通过data配置项传递参数,库内部会自动处理参数拼接/序列化
  • 原生fetch没有data这个配置属性,你写的data参数完全不生效,请求自然没有携带任何自定义参数,后端拿到的就是空值。

修正后的代码(GET请求方案,适配Razor Page Handler)

因为你需要无刷新更新页面内容,GET请求适配 Razor 页的Get类型Handler,参数直接拼接到查询串即可,以下是修正后的loadTable函数:

function loadTable() {
    var select1 = document.getElementById("portMultiselect");
    var selectedPorts = [];
    for (var i = 0; i < select1.options.length; i++) {
        if (select1.options[i].selected) selectedPorts.push(select1.options[i].value);
    }
    var searchString = document.getElementById('searchString').value;
    
    if (searchString != "" || selectedPorts.length != 0) {
        debugger;
    }

    // 构造查询参数
    const params = new URLSearchParams();
    params.append('searchString', searchString);
    // 多选值追加参数,适配ASP.NET Core数组绑定规则
    selectedPorts.forEach(port => params.append('selectedPorts', port));

    // 把参数拼到请求URL中
    fetch(`/Index?handler=IndexPartial&${params.toString()}`)
        .then((response) => {
            return response.text();
        })
        .then((result) => {
            document.getElementById('refreshable').innerHTML = result;
        });
}

后端绑定补充

你对应的IndexModel中的OnGetIndexPartial方法参数需要和前端传参名保持一致,即可正常拿到值:

public IActionResult OnGetIndexPartial(string searchString, List<string> selectedPorts)
{
    // 你的过滤逻辑
    return Partial("_YourPartialView", 你的数据模型);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:06:03