Я внутри ...
public class bgchange : IMapServerDropDownBoxAction
{
void IServerAction.ServerAction(ToolbarItemInfo info)
{
Some code...
и после "некоторого кода" я хочу вызвать
[WebMethod]
public static void DoSome()
{
}
Что вызывает некоторый javascript. Это возможно?
Хорошо, переключи методы здесь. Мне удалось вызвать dosome (); который сработал, но не запустил javascript. Я пытался использовать метод registerstartupscript, но не совсем понимаю, как его реализовать. Вот что я пробовал:
public class bgchange : IMapServerDropDownBoxAction
{
void IServerAction.ServerAction(ToolbarItemInfo info)
{
...my C# code to perform on dropdown selection...
//now I want to trigger some javascript...
// Define the name and type of the client scripts on the page.
String csname1 = "PopupScript";
Type cstype = this.GetType();
// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;
// Check to see if the startup script is already registered.
if (!cs.IsStartupScriptRegistered(cstype, csname1))
{
String cstext1 = "alert('Hello World');";
cs.RegisterStartupScript(cstype, csname1, cstext1, true);
}
}
}
Я получил код registerstartupscript из примера msdn. Ясно, что я неправильно это реализую. В настоящее время vs говорит: «Ссылка на объект требуется для нестатического поля, метода или свойства System.Web.UI.Page.ClientScript.get», ссылаясь на фрагмент кода «Page.Clientscript;» Спасибо.
Что вы имеете в виду под DoSome (), «запускающим некоторый JavaScript»?





хммм ... вопрос кардинально изменился с момента моего первоначального ответа.
Теперь я думаю, что ответ отрицательный. Но могу ошибаться.
Я не уверен, что полностью понимаю последовательность того, что вы пытаетесь сделать, что на стороне клиента, а что нет ....
Однако вы можете добавить на страницу запускаемый javascript-метод, который затем будет вызывать WebMethod. При вызове WebMethod через javascript вы можете добавить функцию обратного вызова, которая затем будет вызываться при возврате WebMethod.
Если вы добавляете на свою страницу тег ScriptManager, вы можете вызывать WebMethods, определенные на странице, через Javascript.
<asp:ScriptManager ID = "scriptManager1"
runat = "server" EnablePageMethods = "true" />
Из функции Page_Load вы можете добавить вызов к вашему WebMethod ..
Page.ClientScript.RegisterStartupScript(
this.GetType(),
"callDoSome",
"PageMethods.DoSome(Callback_Function, null)",
true);
Callback_Function представляет функцию javascript, которая будет выполняться после вызова WebMethod ...
<script language = "javascript" type = "text/javascript">
function Callback_Function(result, context) {
alert('WebMethod was called');
}
</script>
Обновлено:
Нашел эту ссылку для Веб-элементы управления ADF. Это то, что вы используете ??
На этой странице похоже, что что-то вроде этого будет выполнять обратный вызов javascript.
public void ServerAction(ToolbarItemInfo info) {
string jsfunction = "alert('Hello');";
Map mapctrl = (Map)info.BuddyControls[0];
CallbackResult cr = new CallbackResult(null, null, "javascript", jsfunction);
mapctrl.CallbackResults.Add(cr);
}
Когда сработает тревога? Мне нужно, чтобы это произошло после завершения метода. В вашем примере будет ли предупреждение срабатывать при загрузке страницы?
Предупреждение будет срабатывать после вызова WebMethod. В этом примере последовательность будет выглядеть так: PageLoad (сервер) -> вызов PageMethods (javascript) -> DoSome WebMethod (сервер) -> Callback_Function (javascript).
Ты обалденный! Веб-элементы управления ADF - это именно то, что я использую, и ваш код работал как шарм. Вы сделали все возможное. Я люблю переполнение стека из-за таких людей, как ты!
Вы не можете вызывать методы в браузере напрямую с сервера. Однако вы можете добавить в ответ функции javascript, которые будут выполнять методы в браузере.
В методе ServerAction выполните следующие действия.
string script = "<script language='javascript'>\n";
script += "javascriptFunctionHere();\n";
script += "</script>";
Page.RegisterStartupScript("ForceClientToCallServerMethod", script);
Да, когда я вставляю его, он подчеркивает всю строку Page.RegisterStartupScript и говорит: «Ссылка на объект требуется для нестатического поля, метода или свойства 'System.Web.UI.Page.RegisterStartupScript' ...
Если описанный выше способ вызова RegisterStartupScript не сработает, потому что у вас нет ссылки на объект «Страница».
bgchange в вашем примере расширяет Object (при условии, что IMapServerDropDownBoxAction является интерфейсом), что означает, что нет экземпляра Page, на который вы могли бы ссылаться.
Вы сделали то же самое со страницей Asp.Net или UserControl, это сработает, потому что страница будет действительной ссылкой.
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Page.ClientScript.RegisterStartupScript(
this.GetType(),
"helloworldpopup",
"alert('hello world');",
true);
}
}
Не могли бы вы рассказать немного больше о том, чем хотели бы заниматься? Вы архитектура и все такое? А чего бы вы хотели соучастникам на более высоком уровне?