2014-09-04 2 views
0

Мне нужен синхронный вызов из кода ASP.NET (C#) в функцию Javascript.ASP.NET -> Синхронный вызов функции javascript

Я пробовал ScriptManager.Registerclient, но поскольку это асинхронно, это нехорошо. Мне нужно некоторое тестирование в javascript перед возвратом значения (обновление UpdatePanel), чтобы проверить, действительна ли операция.

За короткий пример кода:

myButton_click(object sender, EventArgs args) 
{ 
    <callJavascriptSynchronous> 
    if (MyHiddenField.Value == "true") 
    //Do 
else 
    //Don't 
} 

MyHiddenField находится в пределах UpdatePanel. Для яваскрипта функции:

function javascriptFoo(myInteger) 
{ 
    var returnValue = window.external.TestInteger(myInteger); 
    document.getElementById('<%=MyHiddenField.ClientID%>').value = returnValue; 
} 

UpdatePanel выглядит следующим образом:

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
<ContentTemplate> 
    <asp:HiddenField ID="MyHiddenField" runat="server" ClientIDMode="Static" Value="" Visible="false"/> 
</ContentTemplate> 

Любые предложения по синхронному вызову?

Спасибо!

Edit: Добавлен полный код:

MyPage.aspx:

function javascriptFoo(myInteger) 
{ 
    var returnValue = window.external.TestInteger(myInteger); 
    document.getElementById('<%=MyHiddenField.ClientID%>').value = returnValue; 
} 

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
<ContentTemplate> 
    <asp:HiddenField ID="MyHiddenField" runat="server" ClientIDMode="Static" Value="" Visible="false"/> 
</ContentTemplate> 

<asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand"> 

MyPage.aspx.cs:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    ScriptManager.RegisterStartupScript(UpdatePanelContext, UpdatePanelContext.GetType(), "AlertTest", "AlertTest()", true); 

    string sVal = HiddenFieldContext.Value; 

    if (sVal == "true") //do 
    else //don't 
} 

ответ

1

Когда вы находитесь в клик-событие вашей кнопки, вы уже вышел из интерфейса и не может вернуться назад для вызова функции. Выполните функцию first, clientside, нажав кнопку (прочитайте о событии OnClientClick), затем верните результат с помощью обратной передачи.

This link касается той же проблемы.

+0

Postback не принесет мне никакой пользы, так как это происходит внутри операции. Я на самом деле делаю это внутри события GridView.RowCommand. – user1782815

+0

Где находится "myButton_click"? – Alexander

+0

Где это? Мне нужна проверка данных в событии Gridview_rowCommand. Я могу это сделать, и он работает, но звонок не синхронный. – user1782815

Смежные вопросы