1

Здравствуйте. Из одной веб формы, открываю вкладку в новом окне. Вот такой вот конструкцией:

ClientScript.RegisterStartupScript(this.GetType(), "window.open", "window.open('WebForm4.aspx')", true);

На этой новой вкладке будет тоже кнопка. И как сделать так что бы по нажатию этой кнопки новая вкладка закрывалась? Спасибо заранее.

Андрей
  • 1,413
  • button.OnClientClick = "window.close()"; https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.onclientclick(v=vs.110).aspx –  Apr 06 '17 at 20:09
  • Попробовал, но почему то закрывает только после второго нажатия. Я прописал эту строчку в экшен самой кнопки. Может я не так сделал?
    protected void Button1_Click(object sender, EventArgs e) { Button1.OnClientClick = "window.close()"; }
    – Андрей Apr 06 '17 at 22:02

1 Answers1

0
button.OnClientClick = "window.close()";

https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.onclientclick(v=vs.110).aspx

Попробовал, но почему то закрывает только после второго нажатия. Я прописал эту строчку в экшен самой кнопки. Может я не так сделал? protected void Button1_Click(object sender, EventArgs e) { Button1.OnClientClick = "window.close()"; }

Да, Вы делаете не так. Смотрите: сначала у кнопки нет никакой функциональности на клиенте, она просто вызывает submit формы и обработчик на сервере. В этом обработчике Вы назначаете кнопке свойство OnClientClick, страница генерит html с учетом этого свойства и возвращает этот html браузеру. Теперь Вы нажимаете кнопку, и срабатывет javascript window.close(). Окно закрывается.

Это свойство кнопке надо назначать всегда - в Page_Load, а еще лучше - в маркапе, то есть в свойствах контрола-кнопки в дизайнере. А серверный обработчик Click вообще не нужен.

  • Большое спасибо, разобрался что вы имели в виду. Но стандартный обработчик кнопки мне нужен что бы передать данные из текстбокса с этой странице, на первую страницу. – Андрей Apr 07 '17 at 10:25
  • А вы не могли бы ещё подсказать, как после открытия новой вкладки по нажатию кнопки на первой странице ещё и остановить весь последующий в этой кнопке код. А вот уже по нажатию кнопки на второй форме вернуть исполнение кода в кнопку на первой форме и выполнить весь последующий код? Это как раз и нужно что бы я мог передать данные со второй страницы на первую. Спасибо заранее. – Андрей Apr 07 '17 at 10:56
  • @Андрей Хотел бы обратить Ваше внимание на то, что здесь принято отмечать ответы с решением Вашей задачи, как принятые - галочка слева от ответа. –  Apr 07 '17 at 11:22
  • Извините, не знал, уже сделал. На счёт моего последнего комментария. Я попробовал сделать вот так вот. Server.Transfer("WebForm4.aspx", true); И дальнейший код тормозиться так как мне нужно. На новой форме я о5 нажимаю кнопку и вот её код protected void Button1_Click(object sender, EventArgs e) { ViewState["str"] = TextBox1.Text; Server.Transfer("WebForm2.aspx", true); } И ещё создана функция с ретёрном что бы отловить данные на первой странице. Но как вернуть управление не просто в первую страницу а именно в кнопку с которой всё началось? – Андрей Apr 07 '17 at 11:31
  • @Андрей Веб так не работает: http://ru.stackoverflow.com/questions/649636/%d0%9e%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d1%8c-%d0%ba%d0%be%d0%b4-%d0%b4%d0%be-%d0%bd%d0%b0%d0%b6%d0%b0%d1%82%d0%b8%d1%8f-%d0%ba%d0%bd%d0%be%d0%bf%d0%ba%d0%b8#comment929096_649636 –  Apr 07 '17 at 11:33
  • Я уже понял. Но как то ведь можно вернуть контроль кнопки? Потому что как сделать это по другому не знаю. Да и не думаю что хватить времени изучить. Есть свои сроки. – Андрей Apr 07 '17 at 11:35
  • @Андрей Нельзя. Смиритесь с этим. –  Apr 07 '17 at 11:37
  • А как же тогда это должно выполняться? Я должен выполнить инсерт из новой формы? Или как то по другому? – Андрей Apr 07 '17 at 11:44
  • @Андрей А, так Вам надо сделать в "свои сроки", но так чтобы не "изучить"? Это не ко мне. –  Apr 07 '17 at 13:58
  • Нет, в последнем комментарии я спросил у вас как вообще нужно это реализовать? Из вызванной формы или как то по другому? Если можете объясните пожалуйста. – Андрей Apr 07 '17 at 16:30
  • @Андрей Перво-наперво надо понять, что серверный C# код не может остановиться и ждать действий пользователя. Объект веб формы создается на запрос из браузера, выполняет обработчики событий контролов, производит html, отправляет этот html обратно браузеру и умирает. Когда Вам нужны данные от пользователя, открывать новые закладки браузера - неправильно. Вы можете вернуть ту же самую форму с новыми контролами (теперь видимыми) или сделать Response.Redirect на другую страницу. –  Apr 07 '17 at 16:47