2012-04-17 19 views
13

Kann ich eine Bestätigungsmeldung für eine ActionLink anzeigen?MVC3 Actionlink mit Bestätigungsdialog

Benötige ich JavaScript? Ist es ohne es möglich?

Können Sie mir ein Beispiel geben?

Vielen Dank.

//I want to make a confirmation message appear before the link opens. 
@Html.ActionLink("Checkout and view order list", "Order", "Order") 

Antwort

38

Mit der Überlastung Html.ActionLink(string linkText, string actionName, string controllerName, object RouteValues, object HtmlAttributes) und einige Javascript, können Sie folgendes tun:

@Html.ActionLink("Checkout and view order list", "Order", "Order", null, new { onclick="return confirm('Are you sure you want to click this link?')" }) 

Diese addieren, wird HTML-Attribut onclick, das das angegebene Javascript ausführt, wenn auf den Link geklickt wird. Wenn ein onclick-Ereignis auf einem Link (oder der Übermittlungsschaltfläche eines Formulars) false zurückgibt, wird die Aktion (nach dem Link, Senden des Formulars) nicht ausgeführt. Die Funktion confirm(message) zeigt dem Benutzer einen Bestätigungsdialog mit der angegebenen Nachricht und gibt je nach Antwort des Benutzers entweder true oder false zurück.

+0

+1: Das würde ich auch tun –

+0

Danke! Einfache Lösung! – wholee1

1

bearbeiten: nicht diese Antwort verwenden, die andere von Jim verwenden.

Sie können ActionLink nicht verwenden - Sie müssen etwas JavaScript (wie das gelistete here) schreiben, um eine Bestätigung zu erhalten. Sie können Url.Action verwenden, um die URL zu generieren, die das Javascript letztendlich für den Post oder den Endpunkt verwendet.

Mein Javascript ist schlecht, aber ich denke, das ist die Idee, über bekommt:

<a href="javascript:confirmation();">Checkout and view order list</a> 

<script> 
function confirmation() { 
var answer = confirm("Confirm?") 
if(answer) { 
    // Do something here, post or get 
    window.location = @Url.Action("Order", "Order"); 
} 
} 
</script> 
+0

ActionLink kann weiterhin verwendet werden. Es kann die Bestätigung nicht alleine durchführen. – yoozer8

+0

Wow, wusste das nicht. Tolle Lösung, +1 – eouw0o83hf

+0

Ja, ActionLink hat eine Menge Überlastungen (manchmal kann es unordentlich werden, wenn man versucht, das richtige zu verwenden). Da RouteValues ​​und HtmlAttributes auch ziemlich flexibel sind, können Sie ziemlich viel mit ActionLink tun. – yoozer8

0

In meinem Fall hatte ich einen Knopf, der bereits eine Aktion aufgerufen:

<input id="ButtonDelete" type="button" value="Delete Experiment" class="big-nevigation-button" onclick="location.href='@Url.Action("DeleteExperiment", "Experiment", new { experimentId = Model.ExperimentId })'" /> 

Nach der Lektüre Jims Antwort, habe ich es auf die folgenden:

<input id="ButtonDelete" type="button" value="Delete Experiment" class="big-nevigation-button" onclick="if (confirm('Are you sure you want to delete experiment???')) location.href='@Url.Action("DeleteExperiment", "Experiment", new { experimentId = Model.ExperimentId })'" /> 

Und es funktioniert greate! Danke Jim !!