繁体   English   中英

页面中包含的脚本中带有url.action助手的ASP.NET MVC jQuery自动完成功能

[英]ASP.NET MVC jQuery autocomplete with url.action helper in a script included in a page

我一直在构建我的第一个ASP.NET MVC Web应用程序。 我一直在许多地方使用jQuery自动完成小部件,例如:

<head>
    $("#model").autocomplete({ source: '<%= Url.Action("Model", "AutoComplete") %>' });
</head>

关键是我的Web应用程序在许多不同的地方都有此jQuery代码。 所以我想我将创建一个单独的JavaScript脚本(script.js),在其中可以放置此代码,然后将其包含在母版页中。 然后,我可以将所有这些重复的代码片段放入该脚本中,并在需要的地方调用它们。 所以我做到了。 我的代码如下所示:

在site.js脚本中,我输入了以下功能:

function doAutoComplete() {
    $("#model").autocomplete({ source: '<%= Url.Action("Model", "AutoComplete") %>' });
}


在页面上,我有:

<head>
    <script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
    <script src="../../Scripts/site.js" type="text/javascript"></script>
    <script type="text/javascript">
        doAutoComplete();
    </script>
</head>

但是,当我这样做时,我收到一个无效的参数异常,并且自动完成功能不起作用。 我究竟做错了什么? 有什么想法吗?我需要传递一些东西给doAutoComplete函数吗?

<%=不会在您的外部javascript中进行评估。

解决方案:将URL作为参数传递给您的javascript函数。

<script>
    doAutoComplete('<%= Url.Action("Model", "AutoComplete") %>');
</script>

function doAutoComplete(url) {
    $("#model").autocomplete({ source: url });
}

您需要将函数调用放在脚本块中,并确保在site.js之前加载了jquery ...

<head>
    <script src='path/to/jquery.js'></script>
    <script src="../../Scripts/site.js" type="text/javascript"></script>
    <script>
    doAutoComplete();
    </script>
</head>

编辑:

也许在函数发送到浏览器之前,服务器端未对'<%= ... =%>'标签进行评估? 这是有关此的文章: http : //www.west-wind.com/weblog/posts/252178.aspx

这是该帖子的引文:

如果您需要访问.js文件中的[ASP.NET]变量,也会出现问题-无法将脚本标签嵌入.js文件中,因此将动态值获取到静态文件中会遇到问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM