2

一段时间以来,我一直在努力解决这个问题。我似乎无法让智能感知在 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) %>并不能阻止控件的构建......

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

4

2 回答 2

1

尝试在 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/

于 2009-11-11T14:21:20.560 回答
0

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

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

于 2010-02-05T03:26:01.950 回答