2010-12-13 69 views
1

我正在嘗試使用AJAX調用Page Method。 看到代碼調用bool類型的javascript函數

<asp:Button ID="btn_upload" runat="server" CssClass="btnEffects" Text="Upload" 
     onclick="btn_upload_Click" OnClientClick="return Validate();" /> 

驗證方法應該返回真/假。 的驗證方法的代碼是

<script language="javascript"> 

function Validate() 
{ 
    var filename = $get('<%= txt_filename.ClientID %>').value; 
    PageMethods.IsValidFile(filename,OnSuccess, OnFailure); 
    // IsValidFile is a Page Method of bool return type 
} 

function OnSuccess(result) 
{ 
    if (!result) 
    {  
    alert('File '+ $get('<%= txt_filename.ClientID %>').value + ' does not exist'); 
    return false; 
    } 
    else 
    {  
    return true; 
    } 
} 
function OnFailure(error) 
{ 
} 
</script> 

我的問題是,即使顯示警報後「文件somefilename不存在」。 整個頁面刷新(即發生回發)

回答

0

您正在運行異步操作,但仍然期待它阻止您的呼叫並等待響應,這是我過去看到的一種解決方法,您隱藏了您的「在此請求您點擊隱藏按鈕的成功」

<asp:Button ID="btn_upload_dummy" runat="server" CssClass="btnEffects" Text="Upload"   OnClientClick="Validate();" /> 


<asp:Button ID="btn_upload" runat="server" CssClass="btnEffects" style='display:none;' Text="Upload"   onclick="btn_upload_Click" /> 


<script language="javascript"> 
function Validate() 
{  
    var filename = $get('<%=txt_filename.ClientID %>').value;  
    PageMethods.IsValidFile(filename,OnSuccess, OnFailure);  
    // IsValidFile is a Page Method of bool return type 
} 

function OnSuccess(result) 
{ 
    if (!result)  
    {   
     alert('File '+ $get('<%=txt_filename.ClientID %>').value + ' does not exist');  
     return false;  
    }   
    else  
    {   
     var btn = $get('<%btn_upload.ClientID'); 
     var clicker = btn.click ? btn.click : btn.onclick; 
     clicker();  
    } 
} 


</script> 
+0

:提交按鈕,創建另一個按鈕調用你的Ajax請求,在此請求的成功您點擊隱藏按鈕,這樣的事情。如何做到這一點呼籲? – 2010-12-13 12:02:20

+0

這將有助於實現功能,但點擊虛擬按鈕時會發生頁面刷新。 – 2010-12-13 12:13:28