Daten vom jQuery Dialog im CodeBehind

WaZZkeSS

Erfahrenes Mitglied
Hallo allerseits!

Ich habe da ein problem für welches ich noch keine Lösung fand.
Ich zeige einige TextBoxen in jQuery Dialog an dessen Werte ich im CodeBehind auslesen möchte.

Ich habe es bereits mit HiddenFields, Request.Form["txtTest1"] und txtTest1.Text probiert die Werte auszulesen, ohne Erfolg.
Ich möchte die Daten einfach im CodeBehind in die DB abspeichern.
Muss ich da Ajax verwenden?
Wenn ja, wie. Gibt es ein Beispiel hier oder im Netz?
Kann ich auf die Daten irgenwie anders zugreifen?
Warum kann man auf die Daten nicht zugreifen?

Wäre dankbar wenn mir jemand da weiter helfen könnte.


Lg
W
 

tequila slammer

Erfahrenes Mitglied
Welches ASP verwendest du? classic ASP, ASP.net WebForms oder ASP.net MVC (1 oder 2 oder 3)?
Um die Daten wieder an den Server zu übermitteln bietet sich ajax als eine Möglichkeit an.
 

WaZZkeSS

Erfahrenes Mitglied
Ich verwende normale ASP.NET Webforms mit MasterPages.

Um die Daten wieder an den Server zu übermitteln bietet sich ajax als eine Möglichkeit an.
Gibt es eine andere Möglichkeit auch?
Ich habe mit AJAX bisher nocht nicht wirklich viel zu tun gehabt außer
Kombination Scriptmanger mit UpdatePanel, ControlItems und Triger.

Gibt es vielleicht ein Tutorial dies bzgl. oder ein Sample?


Danke im vorraus und
Lg W
 

abstractizm

Grünschnabel
Hi,
natürlich gibt es jQuery Ajax Tutorials, unendlich viele. Hier unter anderem die Dokumentation.

Ich kenne mit mit ASP und CodeBehind nicht aus, aber wenn die Daten auf der Seite bereits vorhanden sind, brauchst Du kein AJAX Aufruf, wird erst ein Request benötigt, dann kannst Du es per AJAX lösen.

Ein einfacher AJAX Aufruf in jQUery:
PHP:
$(document).ready(function(){
	$('.datenSchreiben').on('click',function(){
		ajaxRequest('read.asp','#ausgabe');
	});
});


function ajaxRequest(urlAdresse, ziel) {
	$.ajax({
		url : urlAdresse,
		success : function(data) {
			// Die Daten aus "urlAdresse" werden in der Variabel "data" abgelegt
			// Jetzt kannst Du Sie in deiner "ziel" Div Box anzeigen lassen
			$(ziel).html(data);
		}
	});
}

Liebe Grüße,
abs.
 

WaZZkeSS

Erfahrenes Mitglied
Hallo abstractizm!

Danke für dein Sample jedoch verstehe ich das nicht so ganz.
Ich habe ein DIV, dieser beinhaltet die oben erwähnten Controls.
Das DIV-Elementzeige ich als jQuery Dialog an.

Code:
$('div#divNew1').dialog('open').dialog({
    title: "test"
});
Im DIV-Tag habe zusätzlich ein Speichern LinkButton mit dem ich dann die eigentlichen Werte speichern möchte. Wenn ich jetzt auf speichern klicke möchte ich die Werte von den Eingabefleder
auslesen können.
Code:
$('#<%= lnkSave1.ClientID %>').click(function () {
    alert($('#<%= txt1.ClientID %>').val());
});
Im alert habe ich den Wert im CodeBehind nicht.

Allerdings habe ich kein "Ziel" - DIV wo ich das anzeige sondern ich will das angezeigte DIV auslesen und die Werte in einer C# Methode speichern.


Vielleicht habe ich auch einen Denkfehler da ich mit AJAX nicht so vertraut bin.
Wäre für weitere Hilfe sehr dankbar.


Danke und Lg
W
 

abstractizm

Grünschnabel
Zum Abfragen von Daten, die auf der Seite schon enthalten sind, benötigst Du kein AJAX.
Was Du brauchst ist ein einfaches Auslesen. Das folgende Beispiel funktioniert mit jQuery 1.7+

http://jsfiddle.net/3Zprg/

Ich gehe davon aus, das Du woanders ein Problem hast, kannst du vielleicht einen Link posten?

Liebe Grüße,
abs.
 

WaZZkeSS

Erfahrenes Mitglied
Link kann ich daweil leider noch nicht posten.

Aber ich glaube da die Daten im jQuery im Client-Context angezeigt werden, werden diese bei einem PostBack wieder zurückgesetzt.
Daher glaube ich das im Click-Event im jQuery die Werte übergeben muss.
Denn hier
Code:
$('#<%= lnkSave1.ClientID %>').click(function () {
    alert($('#<%= txt1.ClientID %>').val());
});
habe ich ja die Werte aber danach wird ein PostBck durchgeführt und die Werte sind dann empty.

Sorry da ich so nach hacke aber ich will es verstehen.

Lg
W.


p.s: Danke für den netten Link
 

abstractizm

Grünschnabel
Also,
ein Blick in die Doku sagt: "Vorhandene Daten werden zu einem Dialogfenster dargestellt." Es wird nichts überschrieben oder sonstiges.

jQuery überschreibt nichts, wenn Du es nicht explizit anordnest.

Das bedeutet die Daten sind vorhanden und Dein Fehler liegt wahrscheinlich woanders.

1. Überprüfe mal Dein .val(). Weil .val() dazu gedacht ist Input / Textareas auszulesen. Für Inhalte in Divs nimmt man für gewöhnlich .html().
2. Schreib den ausgelesenen Wert vorher in einer Variable

PHP:
// meineVar hat jetzt deinen Inhalt
var meineVar = $('#<%= txt1.ClientID %>').val(); // oder .html();

// Arbeite mit "meineVar" weiter
$('#<%= lnkSave1.ClientID %>').click(function () {
    alert(meineVar);
});

Ansonsten poste Doch mal deine Funktion hier rein, und ein bisschen Html dazu Deiner Seite.
 

WaZZkeSS

Erfahrenes Mitglied
Hallo abs.!

Dieser variante bring keinen Wert. Die msgBox ist leer.
Ich habe hier mal einpaar ausschnitte:

Also, mit diesem LinkButton rufe ich das jQuery-Dialog auf.
Code:
<asp:LinkButton ID="lnkNewP1" CausesValidation="false" runat="server" CommandName="NewP1" OnClientClick="return false;" />

Der JS-Script Code dazu
Code:
$("#divNewPE").dialog('open').dialog({
    	// ...
});

Soweit so gut. Das Dialog beinhaltet die Controls im Body definiert sind.
Code:
<div id="divNewP1" class="Dialog">
  <table>
      <tr>
          <td>
              <asp:Label ID="lblPR1" runat="server" AssociatedControlID="txtP1"></asp:Label>
          </td>
          <td>
              <asp:TextBox ID="txtP1" runat="server"></asp:TextBox>
          </td>
          <td>
          </td>
      </tr>
      
... ... ...

      <tr>
          <td>
              <asp:Label ID="lblB1" runat="server" AssociatedControlID="txtB1" ></asp:Label>
          </td>
          <td>
              <asp:LinkButton ID="lnkSave1" Text="Erstellen" ValidationGroup="vgP1" runat="server" CommandName="Erstellen" OnClick="lnkSave1_Click" />
          </td>
          <td>
          </td>
      </tr>
... ... ...

Wenn ich jetzt in das Textfeld im Dialog etwas eingebe und danach auf Speichern klicke, dann kann ich auf den Wert mittels JS zugreifen
Code:
$('#<%= lnkSave1.ClientID %>').click(function () {
    alert($('#<%= txtB1.ClientID %>').val());   // Wert ist "blabla"
});

jedoch im CodeBehind also in C# nicht.
Code:
protected void lnkSave1_Click(object sender, EventArgs e)
{
    string x1 = txtP1.Text;      			// Wert ist ""
    object x2 = Request.Form["txtP1"];	// Wert ist ""

Hier benötige ich dann die Werte damit das in die DB kommt.


Ich hoffe das ich das Prolem deutlicher damit schildern konnte.
Danke im vorraus und Lg
W
 

abstractizm

Grünschnabel
Hi,
ich glaube jetzt habe ich den Ablauf verstanden.

Also Du hast die Daten auf der Seite.
Diese werden korrekt angezeigt.
Danach gehst Du ins Backend und dort sind sie nicht mehr.
Wenn ich das richtig dargestellt habe, dann brauchst Du doch einen AJAX Request.

Nur nochmals zum Verständnis wie man AJAX einsetzten sollte:
AJAX bedeutet das Du einen GET oder POST Request ausführen kannst und das Ergebnis / die Verarbeiten zurückgibt, ohne das Du die Seite verlässt.
Also sollte die Datei, die Du per AJAX aufrufst, nur die Verarbeitung beinhalten, die Ausgabe des Ergebnisses kannst Du weiterhin in Deiner gestalteten Seite beibehalten.

So würde dann ein AJAX Post Befehl aussehen können:

PHP:
// Erst mal Deinen Wert abrufen
var postDaten = $('#<%= txtB1.ClientID %>').val();

// Daten URLEncodieren, damit kein Unfug gemacht werden kann
postDaten = postDaten.serialize();

// HierDeine Verarbeitungsdatei definieren
// Ich gehe davon aus Du hast eine ASP Datei
var postUrl = "speichern.asp";

// Jetzt AJAX mit deinen Daten und der URL ausführen
// Die Daten oben werden im AJAX Befehl so weitergegeben:
// data: '{ key1: postDaten  }
// und key1 heisst dann die POST Variable, die Deine Verarbeitungsdatei mit dem Wert
// empfangen kann

$.ajax({ 
        url : postUrl , 
        type: 'POST',
        data: '{ key1: postDaten  },
        success : function(antwort) { 
            alert('Die Daten wurden gespeichert, die Antwort von Deiner Datei' + antwort);
        } 
});

Klappt es so?