2016-05-07 9 views
0

Ich habe eine Action So:OnClick funktioniert nicht auf Preventt in Action -ASP.NET MVC

@Html.ActionLink("Add New", MVC.Admin.Purchase.Create(), new { @class = "btn btn-success", onclick = "return checkDefaultStore();" }) 

html Ergebnis über Code ist:

<a class="btn btn-sm btn-success" href="/Admin/Purchase/Create" onclick="return checkDefaultStore();">Add New</a> 

ich vor, um neue Seite gehen wollen überprüfe etwas und wenn das nicht existiert, gehe auf neue Seite.

Dazu erstelle ich diese JQuery-Funktion:

function checkDefaultStore(e) { 
var url = $('#ajax-info').data('checkdefaultstore'); 
$.ajax({ 
    url: url, 
    data: {}, 
    type: 'POST', 
    success: function (data) { 
     if (data.result) 
      return true; 
     else 
      return false; 
    }, 
    error: function (response) { 

    } 
}); 
} 

Aktion Methode, die false oder true definiert zurück.

[HttpPost] 
    public virtual JsonResult HasDefault() 
    { 
     bool result = _storeService.HasDefault(); 
     if (result) 
      return Json(new { result = true },JsonRequestBehavior.AllowGet); 
     else 
      return Json(new { result = false, message = "default store does not exists" },JsonRequestBehavior.AllowGet); 
    } 

Wenn Sie auf den Link klicken, ruft er die Funktion auf und ruft die neue Seite auf.

+0

Sie eine Überlastung von 'Action mit()' Das ist ading sowohl die Klassennamen und die JavaScript-Funktion als Routenparameter. Du hast deine Funktion nie getroffen. –

+2

Wenn selbst wenn es täte, würde es nicht die Umleitung (seine bereits von der Zeit, die Sie Wert Ajax-Funktion gibt aufgetreten verhindern. Was wollen Sie eigentlich erreichen? –

+1

@StephenMuecke wenn Klick auf den Link, Funktion seine Forderung und ActionMethod nennen, aber nicht laufen 'Erfolg function' oder' Fehler function' in ajax –

Antwort

3

Ihr Link wird umleiten immer, weil Ajax-Aufrufe sind async und durch die Zeit der Controller das Ergebnis zurückgibt, hat der Browser bereits auf die andere Seite umgeleitet.

Sie Optionen sind (in der Reihenfolge ihrer Präferenz)

  1. Überprüfen Sie den Wert von _storeService.HasDefault() in der GET-Methode , die Ihrer Ansicht erzeugt, und wenn false, dann erzeugen nicht die Link an erster Stelle (kein Skript erforderlich).
  2. Entfernen Sie die onclick von der Verbindung und lassen Sie es nur auf Ihre Create() Methode umleiten. Bei diesem Verfahren prüfen Sie den Wert von _storeService.HasDefault() und falsch, wenn Rückkehr der Ansicht mit der Fehlermeldung (kein Skript erforderlich)
  3. Sprechen Sie die Umleitung in dem Ajax-Erfolg Rückruf location.href verwenden. Sie Code wäre
<a href="#" id="create">Add New</a> 

    $('#create').click(function() { 
     var url = $('#ajax-info').data('checkdefaultstore'); 
     $.post(url, function(data) { 
      if (data.result) 
       location.href = '@Url.Action("Create", "Purchase", new { area = "Admin" }'; 
      else 
       alert(data.message); 
      } 
     }); 
    }); 
Verwandte Themen