Зарегистрируйте JavaScript внутри пользовательского элемента управления, используя C#
Я хочу вызвать функцию JavaScript из пользовательского контроля с помощью C#. Для этого я пытаюсь использовать
ScriptManager.RegisterStartupScript(this, typeof(string), "alertbox", "javascript:ShowPopup('Select a row to rate');", true);
но это не работает для меня. Это прекрасно работает на странице. Может кто-нибудь помочь мне, как я могу вызвать функцию javascript во время выполнения с помощью C#.
Спасибо,
5 ответов
Следующее взято из рабочего кода, показывающего, что скрипт зарегистрирован для запуска из асинхронной обратной передачи в UpdatePanel
,
ScriptManager.RegisterStartupScript( this.upnl, this.upnl.GetType(), Guid.NewGuid().ToString(), "alert('test');", true );
Если ваш код не выполняется изнутри UpdatePanel
, все равно не должно быть typeof(string)
; Вы должны использовать тип некоторого контейнера (как правило, сам элемент управления).
Тип: тип блока клиентского скрипта. Этот параметр обычно указывается с помощью оператора typeof (C#) или оператора GetType (Visual Basic) для получения типа элемента управления, который регистрирует сценарий.
Попробуйте это.GetType() вместо typeof(string):
ScriptManager.RegisterStartupScript(this, this.GetType(), "alertbox", "ShowPopup('Select a row to rate');", true);
Я не уверен, что это лучший способ сделать это, но для моих пользовательских элементов управления, которые используют javascript, у меня есть свойство public string в пользовательском элементе управления, и я регистрирую его на странице.
// код sudo
например. UserControl
{
public bool CustomBool
{
get
{
//logic
return value;
}
}
public string Javascript
{
get { return "javascript...."; }
}
}
на странице
{
page load()
{
if (Usercontrol.CustomBool)
{
ScriptManager.RegisterStartupScript(this, typeof(string), "alertbox", UserControl.Javascript, true);
}
}
}
Недостатком этого является то, что вы должны помнить, чтобы зарегистрировать сценарии на странице. это работает, хотя
Я считаю, что данная строка встраивается буквально, поэтому необходимо заключить ее в костюм <script type='text/javascript' language='javascript'>
а также </script>
Попробуйте это без "javascript:" в строке сценария:
ScriptManager.RegisterStartupScript(this, typeof(string), "alertbox", "ShowPopup('Select a row to rate');", true);