2015-03-14 3 views
0

Я работаю над проектом, который использует IP-платежи для обработки транзакций. Проект включает в себя веб-форму, написанную в ASP с кодом-Behind, написанную на C#.ASP.NET вызов функции Javascript

IPP предлагает реализацию iFrame, где вы можете разместить iFrame на своей странице и отобразить небольшую страницу IPP с полями для ввода информации о кредитной карте. Идея заключается в том, что информация о кредитной карте будет обрабатываться только IPP и никогда не будет выполняться сервером, на котором запущена страница, поэтому нет необходимости гарантировать, что данные карты сохранены.

Для отображения страницы IPP в iFrame, сеанс должен быть инициирован IPP. Сервер инициирует сеанс и передает переменную SessionID. После успешного запуска сеанса на сервер возвращается защищенный токен сеанса. Затем серверу необходимо «заставить» браузер клиента GET или POST SessionID и SST (Secure Session Token) на веб-сайт IPP. Вот где моя проблема.

Я написал функцию Javascript на странице ASPX, которая примет два параметра - SessionID и SST - и отправит их на веб-сайт IPP. Теперь я пытаюсь вызвать эту функцию Javascript из моего кода на C# при успешном инициировании сеанса IPP. Однако я не мог этого сделать.

Я много раз искал, и один ответ, который я продолжаю встречать, - использовать либо RegisterStartupScript, либо RegisterClientScriptBlock. Проблема в том, что они, кажется, вставляют текст непосредственно на страницу, а не вызывают существующую функцию. Предполагая, что я вставил свою функцию на страницу через одну из этих функций, а не записывал ее непосредственно на страницу, она по-прежнему не решает мою проблему вызова этой функции.

Теперь возможно, что я собираюсь сделать это неправильно, и есть намного лучший способ заставить браузер клиента GET/POST SessionID и SST; если да, скажите, пожалуйста. Я неопытен с веб-программированием и, таким образом, изучаю, когда иду и составляю решения по пути, который, скорее всего, не идеален.

Заранее спасибо.

+0

Как «Защищенный токен сеанса» возвращается на сервер? – adaam

+0

Один из вариантов - сделать общедоступные переменные и встроить их непосредственно в JavaScript. Я никогда не видел причины для «RegisterClientScriptBlock» ... кажется более запутанным, чем другие способы выполнить одно и то же ... рендеринг правильного HTML для клиента. – MikeSmithDev

+0

Он возвращается как часть некоторого HTML. Я извлекаю SST и помещаю его в строку. –

ответ

1

Я думаю, что это должно работать:

Допустим, у вас есть что-то подобное в вашем HTML:

<html> 
    <head> 
     <script> 
      function sendValuesToIPP(sessionId, sst){ 
       //do stuff 
      } 
     </script> 
    </head> 
</html> 

Если вы делаете это в коде C#, он должен работать

ClientScriptManager.RegisterStartupScript(
    this.Type, 
    "some_key_you_want_to_identify_it", 
    string.Format("sendValuesToIPP('{0}','{1}')", SessionID, SST), 
    true); 

Имейте в виду, что я предполагаю, что у вас есть серверная среда SessionID и SST, вы можете получить их откуда угодно и просто добавить их в строку, которая на самом деле вызовет функцию при регистрации красный в вашем ASPX.

+0

Это код C#, который должен быть на странице ASPX? Проблема, которую я обнаружил при использовании RegisterStartupScript, заключается в том, что я не могу решить, как вызвать функцию Javascript. Я предполагаю, что ключ - это то, что вы используете в коде C# для вызова функции, но до тех пор, пока вызов RegisterStartupScript не будет выполнен, этот ключ бессмыслен, и я не могу его использовать, потому что он вызывает ошибку. –

+0

Ключ - это просто строка, которую вы назначаете, если вы хотите удалить зарегистрированный скрипт позже.Он редко используется, поэтому вы можете положить все, что захотите. То, что действительно вызовет функцию Javascript, является третьим параметром. Когда вся строка выполняется в C#, она будет вводить что-то вроде , который фактически запустит функцию javascript, которую вы уже имеете в своем ASPX. Вы попробовали? Код должен быть где угодно в файле .cs страницы ASPX. –

+0

Просто попробовал, без радости. Это код, который я использовал: Page.ClientScript.RegisterStartupScript (this.GetType(), «InitiateIPP», string.Format («

Смежные вопросы