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
相关产品推荐
相关产品推荐

