是否可以在用户控件中使用 VS 2008 Javascript Intellisense?

Posted

技术标签:

【中文标题】是否可以在用户控件中使用 VS 2008 Javascript Intellisense?【英文标题】:Is it possible to have VS 2008 Javascript Intellisense in a usercontrol? 【发布时间】:2010-12-14 20:12:42 【问题描述】:

我已经有一段时间反对这个了。我似乎无法让智能感知在 ascx 用户控件中工作,但它在普通的旧 aspx 中工作正常。

这是一个示例 aspx 页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TestScriptLoader._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="scriptManager" ScriptMode="Debug" runat="server" >
        <Scripts>
            <asp:ScriptReference Path="http://ajax.microsoft.com/ajax/beta/0910/Start.js" ScriptMode="Inherit" />
        </Scripts>
    </asp:ScriptManager>

    </form>
    <script type="text/javascript">

    </script>
</body>
</html>

一旦我更新了 javascript intellisense (CTR+SHIFT+J),我就会在脚本标签中获得 MicrosoftAjax 的智能感知。

在 ascx 文件中

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Test.ascx.cs" Inherits="TestScriptLoader.Test" %>

<asp:ScriptManagerProxy ID="scriptManagerProxy" runat="server">
    <Scripts>
        <asp:ScriptReference Path="http://ajax.microsoft.com/ajax/beta/0910/Start.js" ScriptMode="Inherit" />
    </Scripts>
</asp:ScriptManagerProxy>

<script type="text/javascript">

</script>

我没有这样的快乐。

我唯一能想到的就是在一个单独的 JS 文件中为用户控件进行所有编码,但是对于我在特定用户控件中想要的功能与我将为其编写的 javascript 之间存在一对一的映射它们,并且用户控件只会在页面中出现一次。如果不是绝对必要的话,基本上我不想走这条路。

编辑

我还需要能够向这些控件添加服务引用,并具有可用的智能感知功能。

编辑

令我震惊的是,我遇到的问题是我在用户控件中使用了 scriptmanagerproxy。用户控件无法知道它与哪个 ScriptManager 相关联,这就是 javascript intellisense 没有更新的原因。

我可以通过将 scriptmanagerproxy 更改为 scriptmanager 控件来验证这一点,并且智能感知适用于脚本和服务引用。

编辑

我还认为我可以将&lt;asp:ScriptManager&gt; 粘贴到页面中,并用鳄鱼夹包裹:

<% if(false)  %>
    <asp:ScriptManager ID="fakeScriptManager" runat="server"/>
<%  %>


<asp:ScriptManagerProxy ID="scriptManagerProxy" runat="server">
    <Services>
        <asp:ServiceReference Path="~/path/to/your.svc" />
    </Services>
</asp:ScriptManagerProxy>

这似乎可行,但 &lt;% if(false) %&gt; 不会阻止控件的构建...

关于如何实现这一点的任何想法?

【问题讨论】:

【参考方案1】:

由于这个问题已经死了,我将在这里给出答案。

没有。这不可能。原因是 Visual Studio 无法知道 scripmanagerproxy 应该引用的 哪个 scriptmanager 控件,因此它不引用任何脚本管理器。因此,在编辑控件时智能感知不可用。

【讨论】:

【参考方案2】:

尝试在 ascx 顶部的某处添加它(使用您的实际 jquery 文件位置)

<% if (false)  %><script type="text/javascript" src="../../Scripts/jquery-

1.3.2.min.js">

感谢这篇博文的作者 Jouni Heikniemi: http://www.heikniemi.net/hardcoded/2009/08/jquery-intellisense-on-asp-net-mvc/

【讨论】:

抱歉,我的问题没有说清楚。我希望能够使用 scriptmanagerproxy 来生成这个智能感知,它适用于 aspx 页面,但不适用于 ascx。我需要这个来允许我同时使用脚本引用和服务引用。此外,The Gu 在他的页面上发布了该 hack,地址为 weblogs.asp.net/scottgu/archive/2008/11/21/…

以上是关于是否可以在用户控件中使用 VS 2008 Javascript Intellisense?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用VS2008自动挂接C#中的事件?

如何在vs2008 MFC中添加、删除成员变量

DevExpress控件在VS2008上如何使用?为啥我建立了MFC的对话框程序,那些DevExpress控件不能使用?是灰色

新的 MFC 功能包控件是不是应该出现在 VS 工具箱中

为啥我VS2008里的devexpress控件是灰色的不能拖,在VS2010里面却可以用?

vs2008时间控件设置默认值