2017-10-18 2 views
0

Ich bin mit einer Legacy-Web-Anwendung arbeiten - es gibt eine Form mit einigen Texteingaben und einigen Dateieingaben und das Formular auf einer Postback gespeichert ..ASP.NET Postback nach AJAX Antwort

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; 
} 

ich brauche einen AJAX-Request innerhalb PrepareSave() sende ein Feld auf dem Server zu überprüfen und je nach Antwort, weiter mit dem Postback oder nicht. Ich habe es versucht:

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; 
     } 
    }); 
} 

Aber es ist fehlgeschlagen - es post nicht zurück unabhängig von der AJAX-Antwort. Ich habe versucht, die angenommene Antwort here zu implementieren, aber es hat die gleichen Probleme. Was kann ich tun, damit es funktioniert?

Ich habe versucht, zu vereinfachen, dass akzeptierte Antwort oben, um es zu testen:

<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

Problem ist, dass Ajax async ist. Ihr Formular weiß nicht, auf das Ergebnis zu warten. Und 'return' in Ihrem Ajax-Callback gibt keinen Wert von PrepareSave() zurück. Wenn Sie nicht explizit einen Wert aus einer JS-Funktion zurückgeben, erhält jeder aufrufende Code, der versucht, den Rückgabewert zu lesen, standardmäßig den Wert false-y. Daher wurde das Postback gestoppt. Im Grunde müssen Sie das Postback abbrechen, Ihren Ajax-Anruf tätigen, und wenn es in Ordnung ist, dann lösen Sie das Senden programmatisch erneut aus. oder Sie könnten all Ihre Validierung innerhalb des Postbacks durchführen, um Dinge zu vereinfachen, wenn das praktisch ist. – ADyson

+0

Ich stimme zu, für Ihre Bedürfnisse (wie ich es hier bekomme) sollte eine Server-Validierung die Arbeit machen. Wenn Sie sth async machen möchten und Sie sich auf Webformulare verlassen, empfehle ich ein Updatepanel – DotNetDev

+0

Danke für beide Eingaben hier. @DotNetDev, yeah außer diese Form ist ein Modal-Bildschirm, so dass die Validierung ohne Ajax wird ein bisschen schmerzhaft sein. – user982119

Antwort

0

In Code hinter Sie tun können:

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

oder in js, verwenden Sie das Skript Teil von selbst:

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

hth.