Hallo zusammen,
Damit ich in einer Auflistung eine 'In-Place' Edit Funktion ohne Ajax realisieren kann, muss ich via Javascript einen POST (oder einen GET) Request absenden, und diesen mittels ASPX verarbeiten.
Ich habe im Internet nach geeigneten Lösungen für den Javascript Teil gesucht und bin auf folgenden Link gestossen:
http://stackoverflow.com/questions/133925/javascript-post-request-like-a-form-submit
Wenn ich diese Zeilen ausführe, erhalte ich auf meiner ASPX Seite jedoch keine Inhalte im HTTP Header (POST-Variable == null).
Ist der Javascript Teil fehlerhaft, oder muss ich wo anders suchen?
Gruess
ServiceStack & Angular = =)
Ist schon 3 Jahre her.. da war Cross Side Scripting noch nicht so verbreitet und geschützt. Hast Du hier vielleicht eine andere Domain, als Deine ausführende Seite angegeben? Könnte trotz POST eine Rolle spielen.
Welchen Löungsvorschlag hast Du denn verwendet? Wie sieht die Implementierung Server-seitig aus? Hellsehen können wir schließlich nicht.
Wenn Du keine Form absendest und/oder die Variablen nicht so heißen, wie Du sie erwartest, kommt am Ziel auch niemals etwas gültiges an.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hi Abt,
Sorry bin noch nicht ganz wach. 😃
Hier ist meine (momentane) Implementation:
Javascript:
<script type="text/javascript">
// MODA: Funtkion von Stackoverflow um mittels Javascript einen POST Request zu senden.
// [URL]http://stackoverflow.com/questions/133925/javascript-post-request-like-a-form-submit[/URL]
function post_to_url(path, params, method) {
method = method || "post"; // Set method to post by default, if not specified.
var form = document.createElement("form");
form.setAttribute("id", "frmRCH");
form.setAttribute("name", "frmRCH");
form.setAttribute("method", method);
form.setAttribute("action", path);
for (var key in params) {
if (params.hasOwnProperty(key)) {
var hiddenField = document.createElement("input");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", key);
hiddenField.setAttribute("id", key);
hiddenField.setAttribute("value", params[key]);
form.appendChild(hiddenField);
}
}
document.body.appendChild(form);
form.submit();
}
function InsertData(CheckID) {
var Nummer = document.getElementById("TbNummer").value;
var Rechnungsnummer = document.getElementById("TbRechnungsnummer").value;
var Bezugsdatum = document.getElementById("TbBezugsdatum").value;
var Rechnungsdatum = document.getElementById("TbRechnungsdatum").value;
var Typ = document.getElementById("DDTyp").value;
post_to_url(document.URL, { // Formdaten via POST versenden
'nummer': Nummer, // Railcheck Nummer
'rechnungsnummer': Rechnungsnummer, // Rechnungsnummer
'bezugsdatum': Bezugsdatum, // Datum des Railcheck Bezuges
'rechnungsdatum': Rechnungsdatum, // Datum der Rechnung (bei welcher der Railcheck eingesetzt wurde)
'typ': Typ, // Typ des Railchecks (Codevalue Angabe -> Siehe Codeverwaltung bei WebApps2)
'checkid' : CheckID // ID des Checks (0 -> neu!)
}, "POST"
);
}
</script>
Im Page_Load ist folgender Code Abschnitt zu finden, um die Daten zu verarbeiten:
if (!String.IsNullOrEmpty(Request.Form["checkid"]))
{
Int32 RailID = Int32.Parse(Request.Form["checkid"]);
String RailRechnungsnummer = Request.Form["rechnungsnummer"];
DateTime RailBezugsdatum = new DateTime();
if (String.IsNullOrEmpty(Request.Form["bezugsdatum"]) || !DateTime.TryParse(Request.Form["bezugsdatum"], out RailBezugsdatum))
{
SfFeedback.SqlFailure = "Das Bezugsdatum ist ungültig!";
Server.Transfer(Request.Url.AbsolutePath);
}
DateTime? RailRechnungsdatum = null;
if (String.IsNullOrEmpty(Request.Form["rechnungsdatum"]))
RailRechnungsdatum = null;
else
RailRechnungsdatum = DateTime.Parse(Request.Form["rechnungsdatum"]);
string RailTyp = Request.Form["typ"];
string RailNummer = Request.Form["nummer"];
Railchecks input = cmpRail.LoadSingleData(RailID);
if (input == null)
input = new Railchecks() { ID = 0 };
input.Nummer = RailNummer;
input.Rechnungsnummer = RailRechnungsnummer;
input.Rechnungsdatum = RailRechnungsdatum;
input.Bezugsdatum = RailBezugsdatum;
input.Typ_CD = RailTyp;
if (cmpRail.SaveData(input))
{
SfFeedback.SqlSuccess = "Railcheck erfolgreich hinzugefügt / bearbeitet";
}
else
{
SfFeedback.SqlFailure = "Während des Bearbeitens des Railchecks ist ein Fehler aufgetreten!";
}
Server.Transfer(Request.Url.AbsolutePath, false);
}
Gruess
ServiceStack & Angular = =)
Hast Du mal mit Firebug geschaut, was wirklich an den Server gesendet wird und im Page_Loag geschaut, was wirklich ankommt? meist sieht man dann genau hier den Fehler.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hi,
Die POST Variabeln sind im Page_Load Event alle null.
Ich arbeite hier leider mit Internet Explorer und deswegen ist für mich Firebug keine Hilfestellung.
Wenn ich das Javascript debugge sehe ich folgenden HTML Code in meiner erstellten Form:
<FORM id=frmRCH method=post name=frmRCH action=http://localhost:62456/WebApplication/Oekobonus/Bezueger_Form.aspx?mode=edit&id=10057405><INPUT id=nummer value=adfasdf type=hidden name=nummer><INPUT id=rechnungsnummer type=hidden name=rechnungsnummer><INPUT id=bezugsdatum value=26.03.2012 type=hidden name=bezugsdatum><INPUT id=rechnungsdatum type=hidden name=rechnungsdatum><INPUT id=typ value=1 type=hidden name=typ><INPUT id=checkid value=0 type=hidden name=checkid></FORM>
Also das erstellen des Formulars sollte meiner Meinung nach ok sein.
Gruess
ServiceStack & Angular = =)
Also das erstellen des Formulars sollte meiner Meinung nach ok sein.
Das sieht der HTML Standard anders.
<INPUT id=bezugsdatum value=26.03.2012
Ist kein gültiges HTML. Es fehlen die Anführungszeichen, die vor bei Werten mit Leerzeichen zwingend erfordernlich sind. Bei allen anderen sind die Browser so intelligent, und erkennen es selbst, auch wenn es eigentlich nicht gültig ist.
<INPUT id="bezugsdatum" value="26.03.2012"
Ich arbeite hier leider mit Internet Explorer und deswegen ist für mich Firebug keine Hilfestellung.
Dann installiert man sich Firefox - oder Chrome bzw. Chromeplus. Der IE ist der mit Abstand schlechteste Browser für die Entwicklung von Webseiten, weil es einfach keine Debugging-Möglichkeiten gibt.
Die musst Du Dir aber selbst schaffen; die kann und wird Dir niemand abnehmen.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Dann installiert man sich Firefox - oder Chrome bzw. Chromeplus. Der IE ist der mit Abstand schlechteste Browser für die Entwicklung von Webseiten, weil es einfach keine Debugging-Möglichkeiten gibt.
Der IE hat glaub ich seit Version 8 einen Entwicklermodus, mit dem kann man einigermaßen Webseiten debuggen. Ist zwar nicht perfekt, aber besser als gar nichts.
Aufrufen kann man den Entwicklermodus mit der Taste F12.
Hi Abt,
Dass der IE sicher nicht der optimale Browser ist bin ich mir bewusst.
Leider habe ich hier Vorgaben welche ich nicht einfach umgehen kann.
Es scheint so als ob die Übergabe der POST Variabeln nur im Debug Modus funktioniert (keine Ahnung warum).
Ausserdem wird nach erfolgreicher Verarbeitung 'einfach so' der Eventhandler meiner 'Löschen' Spalte aufgerufen & das neu erstellte Item dadurch wieder aus der Datenbank entfernt.
Einen Fehler habe ich bei einem kurzen Überblick leider nicht gefunden.
Aufgrund dessen dass es sich hier um eine Abschlussarbeit handelt und ich einen begrenzten Zeitplan habe, muss ich die Massnahme ergreiffen und eine separate Seite für die Bearbeitung der einzelnen Spalten erstellen.
Mir fehlt einfach die Zeit um mich hier weiter mit dem Problem zu beschäftigen.
Aber ich bleibe dran um dies für mögliche - zukünftige - Projekt zu realisieren.
Merci nochmal für die Tipps,
Gruess
ServiceStack & Angular = =)
Naja alsowenigstens zur Entwicklung kann man immer einen FF nutzen; zur not den Portable. Das werden Dich auch Deine Prüfer fragen; schließlich musst Du ja auch Probleme und Lösungswege beschreiben wenn ich mich richtig entsinne. Ist ja ein künstliches Hindernis.
Mehr kann ich in Sachen WebForms leider auch nicht helfen. Bin in der für mich deutlich angenehmeren MVC-Welt zu Hause.
Trotzdem viel Glück weiterhin.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo,
Du fügst ja eine eigene Form zum Dokument per Script hizu - normalerweise ist bei WebForms nur ein einziges Formular erlaubt, das dann auch für Postback benutzt wird. Möglicherweise lliegt da der Fehler, weil Request.Form
dieses Standardformular abbildet, Du aber ein eigenes benutzt...
Versuch mal statt Request.Form["paramName"] direkt über Request["paramName"] zuzugreifen, dann müsstest Du - so sie denn richtig versendet werden - Deine Werte erhalten.
Gruss, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca