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')
}
问题是,ajax是异步的。您的表单不知道要等待结果。并且你的ajax回调中的'return'不会返回PrepareSave()中的值。如果您没有从JS函数显式返回值,那么任何试图读取返回值的调用代码默认都会获得false-y值。因此回发停止的原因。基本上你需要取消回发,做你的ajax调用,然后如果没问题,然后以编程方式再次触发提交。或者你可以在回发内完成所有的验证以简化事情,如果这很实际的话。 – ADyson
我同意,为了您的需要(因为我在这里得到它)服务器验证应该做的工作。如果你想做异步,你依靠webforms我建议使用更新面板 – DotNetDev
感谢您的输入在这里。 @DotNetDev,是的,除了这种形式是一个模态屏幕,所以做没有Ajax的验证会有点痛苦。 – user982119