2010-12-13 80 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