一段时间以来,我一直在努力解决这个问题。我似乎无法让智能感知在 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 智能感知没有更新的原因。
我可以通过将 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) %>
并不能阻止控件的构建......
关于如何实现这一点的任何想法?