Как убедиться, что js включен в файл ascx? - PullRequest
7 голосов
/ 17 февраля 2011

Итак, проблема в следующем:

У меня есть собственный пользовательский контроль. в котором есть тег javascript, содержащийся в теге script

<script type="text/javascript" src="../somefile.js" ></script>

или некоторый код JavaScript прямо на странице ascx. все работает, если я размещаю этот элемент управления где-то в разметке aspx. но если я добавлю этот элемент управления на страницу динамически в некоторый заполнитель UpdatePanel при обратной передаче (это логика, которую я не могу изменить), элемент управления будет отображаться сам, а затем я получаю сообщение об ошибке js, в котором говорится, что функции, которые размещены в somefile.js, являются не определено / равно нулю. Почему это происходит ? Есть ли в любом случае форсировать js в том числе и в этом случае.

извините за недостаточную конкретность, но объем кода огромен, и я не смог предоставить упрощенный пример с той же ошибкой.

Сценарий включен, но функции не определены. Я новичок в js, поэтому возможно, что только сценарий включен, но не выполнен, поэтому функции не объявлены ???

Интересно то, что если на какой-то странице мой пользовательский элемент управления объявлен в aspx. Добавление еще нескольких экземпляров динамически не вызывает проблем.

Ответы [ 3 ]

16 голосов
/ 17 февраля 2011

В событии load вашего элемента управления сделайте что-то вроде этого:

if (!Page.ClientScript.IsClientScriptIncludeRegistered("keyName"))
    Page.ClientScript.RegisterClientScriptInclude("keyName",
        Page.ResolveUrl("~/Scripts/MyJavaScript.js"));
2 голосов
/ 17 февраля 2011

Как насчет включения его в ScriptManager.Scripts, как это?

<asp:ScriptManager runat="server" ID="scriptManager1" EnablePageMethods="true">
        <Scripts>
            <asp:ScriptReference Path="~/somefile.js" />
        </Scripts>
</asp:ScriptManager>

Редактировать:

Из ascx вы можете сделать что-то вроде этого (OnPreRender будет, где я бы попробовал это):

ScriptManager.GetCurrent(Page).Scripts.Add(new ScriptReference("~/somefile.js"));

В качестве альтернативы, вы можете попробовать

 ScriptManager.GetCurrent(Page).RegisterClientScriptInclude(
            this,
            typeof(Page),
            "UniqueScriptKey",
            ResolveClientUrl("~/somefile.js"));

Ссылочная ссылка

0 голосов
/ 17 февраля 2011

Вы уверены, что ваш файл JS загружается?Возможно, файл находится не в правильном месте - не используйте ../ в пути, так как он относительный и может быть неправильным, если вы делитесь этим, и страницы не все на одной глубине:

сделать что-то вроде этого:

<script type="text/javascript" src="/Scripts/somefile.js" ></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...