JavaScript运行时错误:语法错误,无法识别的表达式0x800a139e



我在MVC 5应用程序中遇到了这种奇怪的行为。

我有一个视图,其中包含一些Ajax.ActionLinks,它们在单击事件时加载相应的部分视图。

@Ajax.ActionLink("Some text here", "_ActionName", "ControllerName", new { param = Model.Id }, ajaxOptions: new AjaxOptions { UpdateTargetId = "partialViewContainer", InsertionMode = InsertionMode.Replace, HttpMethod = "GET" }, htmlAttributes: new { @id = "btn" })

这成功加载了ControllerName_ActionName(int param(返回的部分视图。。然而,在Chrome的控制台中,它抛出了一个异常Uncaught Error: Syntax error, unrecognized expression: /ControllerName/_ActionName?param=12

所以问题出在/ControllerName/_ActionName?param=12表达式上。。。

IE(所有版本(会抛出相同的异常,但会出现令人讨厌的弹出窗口。

Visual Studio被配置为破解所有JavaScript错误,所以我想它是意料之中的。。但我不明白jQuery为什么抛出这个异常。。。它不喜欢Razor引擎生成的表达式。一些帖子建议降级到1.xjQuery版本,但这并没有帮助。

我有其他MVC应用程序使用类似的方法通过Ajax.ActionLinks加载部分视图。以前从未遇到过这个问题。。。

其他信息:

我正在使用Visual Studio 2015 Pro

项目中使用的库:

  • jquery-2.2.1
  • 引导3.6
  • jquery.uno唐突-ajax

如果还有什么我可以提供的更好的理解,请告诉我。提前感谢!

编辑

我尝试降级到jQuery 1.7.2,但我不再得到异常。这是因为。。

来自票据

在1.9之前,如果字符串中的任何位置都有HTML标记,则该字符串将被视为HTML字符串。这可能会导致无意中执行代码并拒绝有效的选择器字符串。从1.9开始,只有以小于("<"(字符开头的字符串才被认为是HTML。Migrate插件可用于恢复1.9之前的行为。如果已知字符串是HTML,但可能以非HTML标记的任意文本开头,请将其传递给jQuery.parseHTML((,它将返回表示标记的DOM节点数组。可以从中创建jQuery集合,例如:$($.parseHTML(htmlString((。例如,在处理HTML模板时,这被认为是最佳实践
文字字符串的简单使用例如CCD_ 3不受该变化的影响
底线:传递给jQuery((的HTML字符串,如果以小于字符以外的字符开头,将被解释为选择器。由于字符串通常不能被解释为选择器,因此最有可能的结果是Sizzle选择器引擎抛出的"无效选择器语法"错误。使用jQuery.parseHTML((解析任意HTML

我不知道如何使用parseHTML((解析Razor引擎生成的Ajax.ActionLink href链接。此外,我想继续使用jQuery 2.x,因为Bootstrap.js 3.6与1.9以下的jQuery版本不兼容…

最终没有使用@Ajax.ActionLink。而是使用@FilixMogilevsky 建议的纯jQuery Ajax调用

现在我有

<a href="" data="@Url.Action("_ActionName", "ControllerName", routeValues: new {param = Model.Id})" class="tabLinks">Some text here...</a>
<div id ="divPartialView">
</div>

在脚本块中,我使用

$('.tabLinks').on('click', function() {    
    var url = $(this).attr('data');
    $.get(url, function(data) {
        $('#divPartialView').html(data);
    });
});

最新更新