Zum Inhalt springen

ASP.Net: Beim verlassen Speichern


Guybrush Threepwood

Empfohlene Beiträge

Ich möchte beim Verlassen einer ASP Seite den Inhalt speichern.

Bevor jetzt hier einwände kommen ich weiß das das nicht einfach so möglich ist, aber ich suche (unkonventionelle) Ideen ;)

Ich hab dazu mal eine kleine Testseite erstellt:


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SaveOnClose.aspx.cs" Inherits="ModalPopupSample.SaveOnClose" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>

<script type="text/javascript">

onbeforeunload = function AskSave()
{
if (confirm('Wollen Sie vor dem Beenden Ihre Änderungen speichern?') == true)
{
__doPostBack('btnSave','');
alert('Daten gespeichert');
}
}


</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="True">
</asp:ScriptManager>

<asp:Label ID="Label1" runat="server" Text="Wert1:"></asp:Label><asp:TextBox ID="txt1" runat="server"></asp:TextBox><br />
<asp:Label ID="Label2" runat="server" Text="Wert2:"></asp:Label><asp:TextBox ID="txt2" runat="server"></asp:TextBox><br />
<asp:Label ID="Label3" runat="server" Text="Wert3:"></asp:Label><asp:TextBox ID="txt3" runat="server"></asp:TextBox><br />
<asp:Button ID="btnSave" runat="server" Text="Speichern" OnClick="btnSave_Click" />
<asp:HiddenField ID="Saved" runat="server" />

</div>
</form>
</body>
</html>
[/PHP]

[PHP]
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Web.Services;

namespace ModalPopupSample
{
public partial class SaveOnClose : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
File.Delete("c:\\savetest.txt");
}

protected void btnSave_Click(object sender, EventArgs e)
{
FileStream file = new FileStream("c:\\savetest.txt", FileMode.CreateNew);
StreamWriter w = new StreamWriter(file);
w.WriteLine(txt1.Text);
w.WriteLine(txt2.Text);
w.WriteLine(txt3.Text);
w.Close();
file.Close();
}
}
}

Die Sache hier ist die das das alert('Daten gespeichert') dafür sorgt das der Webserver genug Zeit hat den Postback durchzuführen und die Daten zu speichern.

Ich find das allerdings nicht so schön jedesmal noch eine Messagebox zu bringen, außerdem könnte es evtl. zu Problemen führen wenn der Server mal nen Hänger hat und die Message Box zu schnell geschlossen wird.

Ich hab auch mal probiert einen Webservice zu schreiben der solange wartet bis gespeichert wurde und im Javascript beim Beenden so lange zu warten bis dieser Webservice zurück gekommen ist, aber das hat leider nicht geklappt.

Ich denke zwar nicht das sich hier eine 100%tige Lösung finden lässt, aber ich lasse mich gerne überraschen ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...