0
- そこにいくつかのテキスト入力と一部のファイル入力を備えたフォームだ、とフォームがポストバックに保存されます。..ASP.NETポストバックAJAX応答の後、私は、従来のWebアプリケーションで働いてい
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コールを作成し、それがOKならば、プロダクティブに再度送信をトリガーする必要があります。それが実用的であれば、単純化するためにポストバック内ですべての検証を行うことができます。 – ADyson
私は同意します。あなたのニーズ(私がここで得たように)でサーバ検証がその仕事をするべきです。あなたがsth非同期を行いたいと思っていて、ウェブフォームに依存しているのであれば、私はUpdatepanel – DotNetDev
を使用することをお勧めします。 @DotNetDev、そうですね、このフォームはモーダルなスクリーンなので、ajaxを使わないで妥当性検査を行うのはちょっと苦しいでしょう。 – user982119