2014-12-15 6 views
2

У меня есть приложение asp.net webforms, над которым я работаю. Он использует главную страницу aspx для создания макета, а затем использует страницы ascx в панели для отображения данных.Регистрация скрипта с помощью User Control

Что мне нужно сделать, это использовать javascript с пользовательским управлением (файлы ascx).

Я думал, что наличие диспетчера сценариев на главной странице aspx позволит мне регистрировать скрипты в функции Page_Load на страницах .ascx.

Вот простой пример того, что я пытаюсь сделать:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 

    Dim csConsoleLogSomething As String = "ConsoleLogSomethingScript" 
    Dim consoleLogScript As String = "function logSomething() { console.log('SOMETHING'); }" 
    Dim cs As ClientScriptManager = Me.Page.ClientScript 
    cs.RegisterStartupScript(Me.GetType(), csConsoleLogSomething, consoleLogScript, True) 
    'I have also tried using: Dim cs As ClientScriptManager = Me.Parent.Page.ClientScript 

End Sub 

Вот HTML на странице ASCX:

<table width="100%" cellpadding="0" cellspacing="0" style="margin: 0px;"> 
    <tr> 
     <td> 
      <input id="btnWTF" type="button" onclick="logSomething()" value="DO SOMETHING FOR THE LOVE OF MOSES" /> 
     </td> 
    </tr> 
</table> 

Вот менеджер сценария декларации о главном ASPX страница:

<asp:ScriptManager ID="ScriptManager1" runat="server" EnableTheming="True" EnablePageMethods="true"> 
</asp:ScriptManager> 

Я также попытался создать простое оповещение, чтобы подняться на загрузку страницы, но я не могу получить любой из моих сценариев для выполнения. Когда я нажимаю кнопку, я получаю «ReferenceError: logSomething is not defined»

Любая помощь будет принята с благодарностью.

Для пинков я просто попробовал этот метод без толку:

ScriptManager.RegisterStartupScript(Button1, Button1.GetType(), csConsoleLogSomething, consoleLogScript, True) 

Кнопки HTML:

<asp:Button ID="Button1" runat="server" Text="Button"/> 

Это привело к сообщению на главной странице ASPX. На консоль ничего не было. Если возможно, я хотел бы держаться подальше от контролей. Конечной целью является включение jQuery в это приложение.

+0

Не могли бы вы разместить дополнительную информацию о своей странице ASP (включая область, в которую вы вставляете свой контроль)? Я мог бы предположить .. – rodrigogq

+0

Мы используем страницу main.aspx, которая по существу является макетом для системы. Страницы Ascx используются на странице aspx - поэтому, к сожалению, элемент управления отсутствует на странице aspx. –

ответ

1

Я считаю, что достиг желаемого результата.

Мои Aspx:

<form id="form1" runat="server"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server" EnableTheming="True" EnablePageMethods="true"> 
     </asp:ScriptManager> 
     <div> 
      <table width="100%" cellpadding="0" cellspacing="0" style="margin: 0px;"> 
       <tr> 
        <td> 
         <input id="btnWTF" type="button" onclick="logSomething()" value="DO SOMETHING FOR THE LOVE OF MOSES" /> 
        </td> 
       </tr> 
      </table> 
     </div> 
    </form> 

Мой отделенного кода:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(), "function logSomething() { alert('SOMETHING'); }", True) 
End Sub 

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

+0

Большое спасибо за ответ. Тем не менее, страница, которая должна выполнить javascript, является страницей ascx (User Control).Также, спасибо за редактирование моего вопроса! –

+0

Он будет работать в любом случае. Вы все равно можете использовать объект Page как параметр. Я только что протестировал его. –

+0

Вы абсолютно правы. Спасибо!!!! –

1

Во-первых, убедитесь, что ваш элемент управления имеет UpdatePanel в качестве родителя. Если это не сработает, сохраните это, а затем попробуйте сначала зарегистрировать скрипт на своей странице и проверить, вызван ли сценарий при загрузке страницы.

На основе ваших комментариев было бы лучше иметь страницы и MasterPage как ваш фрейм, а не использовать элементы управления, чтобы иметь подстраницы.

+0

Большое спасибо за ответ, Рафаэль решил это для меня. Если бы я мог поддержать, я бы ... я просто сделал учетную запись, поэтому у меня недостаточно репутации, чтобы сделать это –

+0

Не проблема! :) – rodrigogq