2014-09-04 145 views
0

我需要從代碼隱藏ASP.NET(C#)到Javascript函數的同步調用。ASP.NET - >同步調用JavaScript函數

我試過ScriptManager.Registerclient,但是因爲這是異步的,所以這是不好的。在返回值(更新UpdatePanel)以檢查操作是否有效之前,我需要在JavaScript中進行一些測試。

對於短碼例如:

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

MyHiddenField是一個UpdatePanel內。對於javascript函數:

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> 

在同步調用有什麼建議?

謝謝!

編輯:新增全碼:

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

當你在你的按鈕的點擊事件,你已經離開前端,不能跳回來進行函數調用。首先執行函數,客戶端,點擊按鈕(閱讀關於OnClientClick事件),然後用回發返回結果。

This link解決了同樣的問題。

+0

回傳會對我沒有好處,因爲這是在操作中發生的。我實際上是在GridView.RowCommand事件中執行此操作。 – user1782815 2014-09-04 08:00:35

+0

'myButton_click'在哪裏? – Alexander 2014-09-04 08:01:59

+0

它在哪裏? 我需要測試Gridview_rowCommand事件中的數據。 我能夠做到這一點,它的工作原理,但呼叫不同步。 – user1782815 2014-09-04 08:03:36