2015-05-18 4 views
0

Кнопка на странице html перенаправляет страницу aspx с помощью команды window.open(). Существуют определенные данные на странице html, которые я хочу на стороне сервера на странице aspx до выполнения page_load.Передача данных с клиентской стороны на сервер до выполнения page_load

Ниже мой код на странице HTML, который перенаправляет на ASPX странице

var win = window.open('mypage.aspx','_self'); 
win.args=this.Args; 

следующий мой код на ASPX странице, которая пытается поймать данные передаются из HTML страницы

<script type='text/javascript'> 

var readyStateCheckInterval = setInterval(function() { 
      if (document.readyState === "loading") { 
       $('#hdnArgs').val(window.args); 
       clearInterval(readyStateCheckInterval); 
      } 
     }, 100); 

</script> 

<input type='hidden' id='hdnArgs' runat='server'/> 

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

protected void Page_Load(object sender, eventargs e) 
{ 
    string data = hdnArgs.value; //this is always null 
} 

Но я получаю всегда «нуль».

readyStateCheckInterval устанавливает значение скрытой переменной после завершения события page_load.

Я хочу значение скрытой переменной до page_load. Как я могу это получить?

+0

Является ли ваш JQuery возвращающим правильное значение для этого HiddenField? –

+0

Да. Он возвращает –

+0

Хорошо. Теперь, если вы хотите играть с ним до 'Page_Load', вы можете попробовать его в методе' Page_Init', который выполняется до PageLoad. Не уверен, что это сработает, вы можете попробовать. –

ответ

1

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

позвольте мне объяснить вам .. Вы пытаетесь установить значение на hdnArgs, но в Page управления жизненного цикла только генерировать и отправить его в браузер только после завершения Page_init,Page_Load,Page_Load_Complete Всех этих методов ..

Итак, когда вы попробуйте установить args значение hdnArgs через $('#hdnArgs').val(window.args);.

Решение

Я думаю, что вам нужно передать значение как QueryString, чтобы получить значение в Page_load

var win = window.open('mypage.aspx?Args='+this.Args,'_self'); 

и в ASPX странице

protected void Page_Load(object sender, eventargs e) 
{ 
string data = Request.QueryString["Args"]; 
} 

Также вы можете отправить данные с помощью Обратная почта, если у вас большие данные.

0

Для подтверждения:

  • hdnArgs находится на начальной странице
  • начальная страница открывает новую страницу в окне
  • , когда эта страница открывается (но не полный, который, мы надеемся, произойдет, когда вы если смотреть быстрее, это произойдет, если это будет быстрее), вход # hdnArgs обновлен до значения a с открытой страницы
  • Page_Load находится на стартовой странице
  • Вы хотитестартовая страница Page_Load, чтобы получить значение из всплывающего окна

Вам необходимо проанализировать жизненный цикл asp.net страниц, например: https://msdn.microsoft.com/en-gb/library/ms178472%28v=vs.100%29.aspx

К тому времени, начальная страница даже думает о перерабатывающем JavaScript, Страница_Load стартовой страницы давно ушла.

Возможно, в Page_Load, вы можете загрузить новую страницу непосредственно, например, с

var content = new System.Net.WebClient().DownloadString(contentUrl); 

и разбором его для #hvnArgs

+0

hdnArgs и page_load находятся на целевой странице. а не на странице источника –

+0

Вот почему я добавил «подтвердить», потому что это «следующий мой код на странице aspx» указывает иначе. В любом случае, 'Page_Load' происходит до того, как страница будет отправлена ​​в браузер, поэтому перед запуском любого клиентского скрипта. Если вы хотите, чтобы значения, переданные в вашу страницу Page_Load, были просто переданы по URL-адресу 'window.open ('mypage.aspx? Args = xxx' ...' –