无法在 ajax 调用中访问 Url.Action 中的项目
Posted
技术标签:
【中文标题】无法在 ajax 调用中访问 Url.Action 中的项目【英文标题】:Unable to access item inside Url.Action in ajax call 【发布时间】:2020-05-11 02:38:45 【问题描述】:我有一个 Ajax 调用,在成功函数中我有一个 $.each 循环。当我尝试使用 dtl 时,它显示“名称 dtl 在当前上下文中不存在”
代码
$.ajax(
url: $("#getAllNewsBasicDetails").val(),
cache: false,
type: "POST",
success: function (_newsDetails)
$.each(newstype, function (i, dtl)
content = '';
content += '<a href="#" class="text-black">' + dtl.NewsTitle + '</a>';
content += '<a class="btn btn-sm btn-primary" href="@Url.Action("NewsDetails", "News",new@NewsId=dtl.NewsId )">'; // In here it shows 'The Name dtl doesn't exist in the current context'
content += '</div>';
$("#searchItems").prepend(content);
);
【问题讨论】:
success function
在客户端运行,但Url.Action
- 在服务器上运行。
@yW0K5o 是的,但在这里我无法分配 dtl.NewsId... 有没有办法使用它?
使用content += '<a class="btn btn-sm btn-primary" href="/News/NewsDetails?NewsId=" + dtl.NewsId.toString() + ">";
检查我的语法。
我创建了一个 MVC 项目并得到与您相同的错误(当前上下文中不存在名称 dtl)。当我使用content += '<a class="btn btn-sm btn-primary" href="/News/NewsDetails?NewsId="' + dtl.NewsId.toString() + '">';
时,错误消失了,这又是客户端/服务器功能的混合。 dtl 来自客户端(html/javascript),Url.Action 来自服务器(MVC)。
【参考方案1】:
请按如下方式更改您的 ajax 操作:
$.ajax(
url: $("#getAllNewsBasicDetails").val(),
newsUrl: '@Url.Action("NewsDetails", "News",new@NewsId=-100000 )',
cache: false,
type: "POST",
success: function (_newsDetails)
$.each(newstype, function (i, dtl)
var newsUri = newsUrl;
content = '';
content += '<a href="#" class="text-black">' + dtl.NewsTitle + '</a>';
content += '<a class="btn btn-sm btn-primary" href="'+ newsUri.replace("-100000", dtl.NewsId)+'">';
content += '</div>';
$("#searchItems").prepend(content);
);
【讨论】:
仍然无法识别 dtl :( 您需要将 Url.Action 的结果传递给成功函数。我更新了我的帖子。请参考。以上是关于无法在 ajax 调用中访问 Url.Action 中的项目的主要内容,如果未能解决你的问题,请参考以下文章
Ajax调用从extjs到Yii action url不显示post数据
如何在 laravel js 文件中添加 ajax URL?