是否可以在用户控件中使用 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 控件来验证这一点,并且智能感知适用于脚本和服务引用。
编辑
我还认为我可以将<asp:ScriptManager>
粘贴到页面中,并用鳄鱼夹包裹:
<% 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>
这似乎可行,但 <% if(false) %>
不会阻止控件的构建...
关于如何实现这一点的任何想法?
【问题讨论】:
【参考方案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?的主要内容,如果未能解决你的问题,请参考以下文章
DevExpress控件在VS2008上如何使用?为啥我建立了MFC的对话框程序,那些DevExpress控件不能使用?是灰色