У меня есть динамически созданное меню, к которому привязано событие menuItemClick. В этом случае я хочу выполнить простой скрипт window.open, который использует URL-адрес выбранных элементов. Причина, по которой мне нужно это сделать, заключается в том, что мне нужно установить параметры открытия окна (т.е. без полос прокрутки, без панелей инструментов и т. д.).
Мой вопрос: есть ли способ просто создать строку сценария для выполнения, а затем фактически выполнить ее?
Пока у меня есть:
string script = "window.open('" + e.Item.NavigateUrl + "' ,'_MAIN_WINDOW','width='+ screen.width + '-60,height=' + screen.height + '-500,left=' + screen.left + '-30,top=' + screen.top + '-30,screenx=0,screeny=0,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,copyhistory=no, resizable=yes')";
Но я не знаю, как потом выполнить этот скрипт.





Вы захотите использовать Page.ClientScript.RegisterStartupScript (или ScriptManager.RegisterStartupScript, если вам нужно, чтобы он запускался после частичной обратной передачи).
ItemClick не вызывает обратную передачу? Если все на клиенте, как насчет menuItem.Attributes ["onclick"] = script; ?
Переопределите событие OnPreRender страницы.
Внутри вы делаете:
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
foreach (MenuItem item in m1.Items) // m1 is the menu in my case :)
{
item.Target = string.Format("window.open('{0}');", item.NavigateUrl);
}
}
Вы можете поместить код window.open (...) в функцию javascript, называемую onButtonClick (item), и испустить ее с помощью RegisterStartupScript (), как было предложено bdukes, затем в коде aspx для страницы вы можете добавить обработчик событий, например
<a id = "bla" onclick = "javascript:onButtonClick(this);" >Dummy item</a>
Затем, когда вы нажимаете на элемент, onButtonClick будет вызываться с выбранным элементом в качестве параметра.
Я пробовал это, но мне нужно выполнить его во время ItemClick. Когда я регистрирую его во время itemClick, он не выполняется до следующей обратной передачи.