Ich entwickle eine ASP.Net MVC
Site und liste darauf einige Buchungen aus einer Datenbankabfrage in einer Tabelle mit einem ActionLink
auf, um die Buchung in einer bestimmten Zeile mit einem bestimmten BookingId
wie folgt zu stornieren :
Meine Buchungen
<table cellspacing="3">
<thead>
<tr style="font-weight: bold;">
<td>Date</td>
<td>Time</td>
<td>Seats</td>
<td></td>
<td></td>
</tr>
</thead>
<tr>
<td style="width: 120px;">2008-12-27</td>
<td style="width: 120px;">13:00 - 14:00</td>
<td style="width: 100px;">2</td>
<td style="width: 60px;"><a href="/Booking.aspx/Cancel/15">cancel</a></td>
<td style="width: 80px;"><a href="/Booking.aspx/Change/15">change</a></td>
</tr>
<tr>
<td style="width: 120px;">2008-12-27</td>
<td style="width: 120px;">15:00 - 16:00</td>
<td style="width: 100px;">3</td>
<td style="width: 60px;"><a href="/Booking.aspx/Cancel/10">cancel</a></td>
<td style="width: 80px;"><a href="/Booking.aspx/Change/10">change</a></td>
</tr>
</table>
Was wäre schön, wenn ich das verwenden könnte, um jQuery Dialog
eine Nachricht zu öffnen, in der gefragt wird, ob der Benutzer sicher ist, dass er die Buchung stornieren möchte. Ich habe versucht, dies zum Laufen zu bringen, aber ich bin immer wieder dabei, eine jQuery-Funktion zu erstellen, die Parameter akzeptiert, damit ich die ersetzen kann
<a href="https://stackoverflow.com/Booking.aspx/Cancel/10">cancel</a>
mit
<a href="#" onclick="ShowDialog(10)">cancel</a>
.
Die ShowDialog
Funktion würde dann den Dialog öffnen und auch den Parameter 10 an den Dialog übergeben, so dass, wenn der Benutzer auf Ja klickt, die href:/Booking.aspx/Change/10
Ich habe den jQuery-Dialog in einem Skript wie dem folgenden erstellt:
$(function() {
$("#dialog").dialog({
autoOpen: false,
buttons: {
"Yes": function() {
alert("a Post to :/Booking.aspx/Cancel/10 would be so nice here instead of the alert");},
"No": function() {$(this).dialog("close");}
},
modal: true,
overlay: {
opacity: 0.5,
background: "black"
}
});
});
und der Dialog selbst:
<div id="dialog" title="Cancel booking">Are you sure you want to cancel your booking?</div>
Also endlich zu meiner Frage: Wie kann ich das erreichen? oder gibt es einen besseren weg dazu?
jQuery bietet eine Methode, mit der Daten für Sie gespeichert werden, ohne dass ein Dummy-Attribut verwendet oder eine Problemumgehung für Ihr Problem gefunden werden muss.
Binden Sie das Klickereignis:
Und dein Dialog:
quelle
In Bezug auf das, was Sie mit jQuery tun, ist mein Verständnis, dass Sie Funktionen wie Sie verketten können und die inneren Zugriff auf Variablen von den äußeren haben. Wenn Ihre ShowDialog (x) -Funktion diese anderen Funktionen enthält, können Sie die darin enthaltene x-Variable wiederverwenden und sie wird als Referenz auf den Parameter der äußeren Funktion verwendet.
Ich stimme mausch zu. Sie sollten sich wirklich die Verwendung von POST für diese Aktionen ansehen, bei denen ein
<form>
Tag um jedes Element hinzugefügt wird , aber die Wahrscheinlichkeit, dass ein automatisiertes Skript oder Tool das Ereignis "Abbrechen" auslöst, sehr viel geringer ist. Die Aktion Ändern kann unverändert bleiben, da sie vermutlich nur ein Bearbeitungsformular öffnet.quelle
Ich habe jetzt Ihre Vorschläge ausprobiert und festgestellt, dass es irgendwie funktioniert,
Siehe mein "neues" Skript unten:
});
Irgendwelche Hinweise?
Oh, und mein Action-Link sieht jetzt so aus:
quelle
Wenn Sie sich Ihren Code ansehen, müssen Sie die Funktionalität hinzufügen, um das Fenster zu schließen und die Seite zu aktualisieren. In Ihrer "Ja" -Funktion sollten Sie schreiben:
Das Schreiben des Codes zum Entfernen der Tabellenzeile macht keinen Spaß, daher lasse ich Sie sich mit den Details befassen, aber im Grunde müssen Sie dem Dialogfeld mitteilen, was zu tun ist, nachdem Sie ihn veröffentlicht haben. Es mag ein kluger Dialog sein, aber es braucht eine Richtung.
quelle
Nach MEHREREN STUNDEN von try / catch kam ich endlich zu diesem Arbeitsbeispiel. Die Arbeit an AJAX POST mit neuen Zeilen wird im laufenden Betrieb an die TABELLE angehängt (das war mein eigentliches Problem):
Die Magie kam mit folgendem Link:
Dies ist die letzte Arbeit mit AJAX POST und Jquery Dialog:
quelle
Diese Arbeit für mich:
<a href="#" onclick="sposta(100)">SPOSTA</a>
Wenn Sie in der Dialogalarmanzeige 100 auf "Sposta" klicken
quelle
Ok, das erste Problem mit dem div-Tag war einfach genug: Ich habe gerade ein hinzugefügt
style="display:none;"
und bevor ich den Dialog anzeigte, habe ich dies in meinem Dialogskript hinzugefügt:Aber für die Post-Version habe ich immer noch kein Glück.
quelle
Geben Sie nur eine Idee, die Ihnen helfen kann. Wenn Sie den Dialog vollständig steuern möchten, können Sie versuchen, die Verwendung von Standardschaltflächenoptionen zu vermeiden, und selbst Schaltflächen in Ihrem #dialog div hinzufügen. Sie können Daten auch in ein Dummy-Attribut eines Links wie Click einfügen. Rufen Sie attr ("data") auf, wenn Sie es brauchen.
quelle
Eine von Boris Guery inspirierte Lösung, die ich verwendet habe, sieht folgendermaßen aus: Der Link:
binde eine Aktion daran:
Und dann, um auf das ID-Feld zuzugreifen (in diesem Fall mit dem Wert 15:
quelle
ich hoffe das hilft
quelle