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

Posted

技术标签:

【中文标题】ASP.NET MVC jQuery 自动完成与页面中包含的脚本中的 url.action 助手【英文标题】:ASP.NET MVC jQuery autocomplete with url.action helper in a script included in a page 【发布时间】:2011-02-02 22:43:51 【问题描述】:

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

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

问题是我通过我的网络应用程序在许多不同的地方都有这个 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>

但是当我这样做时,我得到一个 Invalid Argument 异常并且自动完成不起作用。我究竟做错了什么?有什么想法吗?我需要向 doAutoComplete 函数传递一些东西吗?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

您需要将函数调用放在脚本块中,并确保在您的 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

下面是这篇文章的引述:

如果需要也有问题 访问 [ASP.NET] 中的变量 .js 文件 - 你不能嵌入脚本 标记到 .js 文件中,因此得到一个 将动态值转换为静态文件是 有问题的

【讨论】:

对不起,当我试图简化我的问题的代码时,我拿出了太多东西。该调用位于脚本块中,并且 jquery 在 site.js 之前加载。我已经编辑了这个问题……谢谢你让我保持正确! :) 我不知道这是否是它与 asp.net 的工作方式(我是一个 php 人),但如果我想在服务器端评估 .js 文件中的某些内容,我有给文件一个 .php 扩展名。我将编辑我的答案以解释更多...

以上是关于ASP.NET MVC jQuery 自动完成与页面中包含的脚本中的 url.action 助手的主要内容,如果未能解决你的问题,请参考以下文章