无法在 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 += '&lt;a class="btn btn-sm btn-primary" href="/News/NewsDetails?NewsId=" + dtl.NewsId.toString() + "&gt;";检查我的语法。 我创建了一个 MVC 项目并得到与您相同的错误(当前上下文中不存在名称 dtl)。当我使用content += '&lt;a class="btn btn-sm btn-primary" href="/News/NewsDetails?NewsId="' + dtl.NewsId.toString() + '"&gt;'; 时,错误消失了,这又是客户端/服务器功能的混合。 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?

从按钮单击调用MVC Razor Ajax

在JAX调用中将Json数据发送到@ Html.Action

带有aspnet mvc的ajax永远无法工作

Zscaler 的 Ajax 问题