2017-10-18 112 views
0

我与传统的Web应用程序的工作 - 有一些文字输入和一些文件输入的表单,表单保存回发..ASP.NET AJAX回发响应后

HTML:

<input id="txt1" name="txt1" type="text" /> 
<input id="hfd1" name="hfd1" type="hidden" value="-1" /> 
<input id="file1" name="file1" runat="server" type="file" /> 
<asp:Button ID="btnSave" runat="server" OnClientClick="return PrepareSave()" OnClick="btnSave_Click" Text="Save" /> 

JS:

function PrepareSave() { 
    $('#hfd1').val($('#txt1').val()); 
    return true; 
} 

我需要发送内部PrepareSave()一个AJAX请求验证服务器上的一个字段,并根据响应,进行与回发或没有。我试过这个:

function PrepareSave() { 
    Project1.Web.Services.AJAXService1.CheckSomething(someString, function (result) { 
     if (result == true) { 
      // continue PostBack 
      $('#hfd1').val($('#txt1').val()); 
      return true; 
     } 
     else { 
      // abort PostBack 
      alert('invalid'); 
      return false; 
     } 
    }); 
} 

但它失败 - 它不回发,无论AJAX响应如何。我尝试过实施已接受的答案here,但它遇到同样的问题。我能做些什么来使它工作?

我试着简化上述接受的答案,来测试它:

<asp:Button ID="btnSave" runat="server" ClientIDMode="Static" OnClientClick="PrepareSave(); return false;" Text="Save" /> 
<asp:Button ID="btnSaveHidden" runat="server" ClientIDMode="Static" OnClick="btnSave_Click" Visible="False" /> 

function PrepareSave() { 
    $('#btnSaveHidden').click(); // does nothing. also tried .trigger('click') 
} 
+0

问题是,ajax是异步的。您的表单不知道要等待结果。并且你的ajax回调中的'return'不会返回PrepareSave()中的值。如果您没有从JS函数显式返回值,那么任何试图读取返回值的调用代码默认都会获得false-y值。因此回发停止的原因。基本上你需要取消回发,做你的ajax调用,然后如果没问题,然后以编程方式再次触发提交。或者你可以在回发内完成所有的验证以简化事情,如果这很实际的话。 – ADyson

+0

我同意,为了您的需要(因为我在这里得到它)服务器验证应该做的工作。如果你想做异步,你依靠webforms我建议使用更新面板 – DotNetDev

+0

感谢您的输入在这里。 @DotNetDev,是的,除了这种形式是一个模态屏幕,所以做没有Ajax的验证会有点痛苦。 – user982119

回答

0

在后面的代码,你可以这样做:

ClientScript.RegisterStartupScript(GetType(), "ReloadParent", "window.parent.location.href = window.parent.location.href;", true); 

或JS,本身使用的脚本部分:

window.parent.location.href = window.parent.location.href; 

hth。