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

JavaScript向控制器传参报错求助:id参数未被识别

问题:传递ID给Static控制器PropDetails方法时出现'id = id'错误

我尝试调用propDetails函数并向其传递一个ID,再将该ID传递给Static控制器,但持续报错:'id = id'(第二个ID不存在)。抱歉提出这个基础问题,但我实在找不到问题所在。代码如下:

function propDetails(id) { 
  var $detailDiv = $('#detailsDiv'), url = $(this).data('url'); 
  $.get( '@Url.Action("PropDetails", "Static", new { id = id })', function(data) { 
    $('#detailsDiv').html(data); 
  }); 
}

恳请提供相关指导。


问题根源分析

你遇到的问题其实是Razor语法和JavaScript变量的混淆啦。@Url.Action是服务器端的Razor代码,它在页面渲染的时候就会执行,而你在里面写的id,Razor会把它当成服务器端的变量,不是你函数里传入的JavaScript的id参数——这就导致服务器找不到这个服务器端的id变量,所以报错说第二个id不存在。

解决方法

这里有两种靠谱的解决方式,你可以选适合自己的:

方式一:拼接URL参数(简单直接)

既然@Url.Action会生成基础的控制器方法路径,我们可以在后面手动拼接JavaScript的id参数:

function propDetails(id) { 
  var $detailDiv = $('#detailsDiv');
  // 先让Razor生成基础路径,再拼接id参数
  var baseUrl = '@Url.Action("PropDetails", "Static")';
  $.get(baseUrl + '?id=' + id, function(data) { 
    $('#detailsDiv').html(data); 
  }); 
}

方式二:用$.get的参数对象(更规范)

如果不想手动拼接URL,可以把id作为$.get的第二个参数传递,jQuery会自动帮你处理参数拼接:

function propDetails(id) { 
  var $detailDiv = $('#detailsDiv');
  var targetUrl = '@Url.Action("PropDetails", "Static")';
  // 把id放在参数对象里,jQuery会自动添加到URL中
  $.get(targetUrl, { id: id }, function(data) { 
    $('#detailsDiv').html(data); 
  }); 
}

额外小提示

你代码里的url = $(this).data('url')看起来没用到,可以考虑删掉,避免冗余哦~


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:20:21