Возможно ли иметь VS 2008 Javascript Intellisense в пользовательском контроле? - PullRequest
2 голосов
/ 10 ноября 2009

Я уже некоторое время стучу головой об это. Я просто не могу заставить intellisense работать в пользовательском элементе управления 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>

Там я получаю intellisense для MicrosoftAjax в теге script, как только я обновил javascript intellisense (CTR + SHIFT + J).

В файле 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, для которого я напишу их, и пользовательский элемент управления будет отображаться на странице только один раз. По сути, я не хочу идти по этому пути, если не абсолютно необходим.

EDIT

Мне также нужно иметь возможность добавлять ссылки на службы к этим элементам управления и иметь доступ к intellisense.

EDIT

Меня просто поразило, что проблема, с которой я сталкиваюсь, заключается в том, что я использую scriptmanagerproxy внутри usercontrol. Пользовательский контроль не может знать, с каким ScriptManager он связан, поэтому javascript intellisense не обновляется.

Я могу убедиться в этом, изменив scriptmanagerproxy на элемент управления scriptmanager, и intellisense работает как для скриптов, так и для ссылок на сервисы.

EDIT

Я также подумал, что могу просто вставить <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) %> не мешает созданию элемента управления ...

Есть идеи, как этого добиться?

Ответы [ 2 ]

1 голос
/ 11 ноября 2009

попробуйте добавить это где-нибудь в верхней части вашего 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/

0 голосов
/ 05 февраля 2010

Поскольку этот вопрос исчез, я собираюсь поставить здесь ответ.

Нет. Это невозможно. Причина в том, что Visual Studio не может узнать , на который scriptmanager управляет сценарий scripmanagerproxy, на который, как предполагается, ссылается, поэтому он не ссылается ни на какой менеджер скриптов. Поэтому при редактировании элемента управления intellisense недоступен.

...