我正在尝试使用AJAX调用Page方法。 见代码
<asp:Button ID="btn_upload" runat="server" CssClass="btnEffects" Text="Upload"
onclick="btn_upload_Click" OnClientClick="return Validate();" />
Validate方法应该返回true / false。 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 :(得分:0)
您正在运行异步操作并且仍然期望它阻止您的呼叫并等待响应,这是我过去看到的一种解决方法,您隐藏了提交按钮并创建了另一个调用您的ajax请求的按钮,在此请求的成功中,您单击隐藏按钮,如下所示:
<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>