ASP.NET WebForms + Postback, затем откройте всплывающее окно - PullRequest
3 голосов
/ 21 ноября 2008

У меня есть LinkButton, который должен выполнить обратную передачу для выполнения некоторой логики.

После завершения загрузки страницы вместо загрузки страницы в браузере я хочу оставить ее в покое и открыть новое окно.

Пока что лучшая идея, которую я имел, это поместить LinkButton в UpdatePanel и заставить его отображать некоторый JavaScript, когда он перезагружается, но я думаю, что это совершенно взломано. Кроме того, если я правильно помню, JavaScript на панели обновлений не будет работать в любом случае.

Есть еще идеи?

Ответы [ 3 ]

6 голосов
/ 22 ноября 2008

Используйте LinkButton.PostBackUrl, чтобы установить для POST другую страницу, и некоторый клиентский скрипт, чтобы получить новое окно (и старую цель восстановить, чтобы будущие обратные передачи работали нормально). 2-я страница может использовать PreviousPage для получения доступа к любому необходимому состоянию с исходной страницы.

<script runat="server">
   void lnk_Click(object sender, EventArgs e) {
      // Do work
   }
</script>

<script type="text/javascript">
   var oldTarget, oldAction;
   function newWindowClick(target) {
      var form = document.forms[0];
      oldTarget = form.target;
      oldAction = form.action;
      form.target = target;

      window.setTimeout(
         "document.forms[0].target=oldTarget;"
         + "document.forms[0].action=oldAction;", 
         200
      );
   }
</script>

<asp:LinkButton runat="server" PostBackUrl="Details.aspx" Text="Click Me"
  OnClick="lnk_Click"
  OnClientClick="newWindowClick('details');" />
2 голосов
/ 22 ноября 2008

Вот код:

protected void Button1_Click(object sender, EventArgs e)

{

// Do some server side work

string script = "window.open('http://www.yahoo.com','Yahoo')";

if (!ClientScript.IsClientScriptBlockRegistered("NewWindow"))

{

ClientScript.RegisterClientScriptBlock(this.GetType(),"NewWindow",script, true);

}

}
1 голос
/ 21 ноября 2008

Одна вещь, которую вы можете попробовать, - это обработать событие LinkButton OnClick, а затем зарегистрировать Page.ClientScript.RegisterStartupScript с помощью всплывающего кода, который поместит некоторый Javascript в тег для отключения после загрузки страницы. Это должно запустить ваше новое окно после завершения обработки.

РЕДАКТИРОВАТЬ: Читая ваш комментарий, я думаю, что вы все еще можете использовать этот подход, сохранить результаты в переменной сеанса, а затем всплывающую страницу вытащить результаты оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...