2016-06-04 17 views
0

Ich versuche für den folgenden Code eine Action-Methode in der Steuerung ausgelöst.JavaScript nicht feuern Methode in der Steuerung

<script> 
    function updateSalary() { 
     var salary = $('#basicSalary').val(); 
     var figure = $('#allowance').val(); 
     $.ajax({ 
      url: '@Url.Action("updateSalary","salary")', 
      type: "GET", 
      dataType: "JSON", 
      data: { salary: basicsalary, figure: allowance }, 
      success: function (add) { 
       $('#basicSalary').val(salary) 
      } 
     }) 
    } 
</script> 

Razor:

<td> 
    @Html.DropDownListFor(model => model.allowance, Model.allowances, "--please choose an option--", new { @class = "form-control", @onchange = "updateSalary()" }) 
</td> 

Controller:

public ActionResult updateSalary (int salary, string figure) 
     { 
      if (figure == "Transport") 
      { 
       try 
       { 
        allowance trans = hc.allowances.First(x => x.name == figure); 
        if (trans != null) 
         salary = +Convert.ToInt32(trans.amount); 
        else 
        throw new excep("Record not found"); 
       } 
       catch 
       { 

       }      
      } 
      return Json(salary,JsonRequestBehavior.AllowGet); 
     } 

Grundsätzlich allowance sollte auf der Webseite zu basicSalary Feld hinzugefügt bekommen, wenn der Benutzer wählt die allowance Dropdownlist. Ich habe einen Breakpoint auf geschweifte Klammern von updateSalary Aktionsmethode gesetzt, um zu überprüfen, ob javaScript es in der Steuerung auslöst oder nicht, wenn ich die Auswahl in allowance dropdownList ändere. Es feuert nicht. Ich kann nicht herausfinden warum. Konnte jemand sehen warum?

+0

Javascript-Funktion Ist totaly nicht? Oder nur Ajax? – Berkay

Antwort

1

Einige hier Fehler:

data: { salary: salary, figure: figure } 

die Namen der Variablen gegeben Sie zu Beginn Ihrer updateSalary Javascript-Funktion erklärt:

data: { salary: basicsalary, figure: allowance } 

wahrscheinlich sein sollte.

Um diese Art von Problemen zu verfolgen, würde ich Ihnen empfehlen, die Entwicklersymbolleiste Ihres Browsers zu verwenden. Wenn Sie beispielsweise Google Chrome verwenden, können Sie auf F12 klicken, um es zu aktivieren, und dann im Register Console nach JavaScript-Fehlern suchen. Auch wenn Sie mit AJAX-Abfragen wie Ihnen arbeiten, können Sie sich die Registerkarte Network ansehen, die Ihnen alle an den Server gesendeten Anfragen sowie die entsprechende Antwort anzeigt. Dies könnte Ihnen einen guten Hinweis geben, wo das Problem liegen könnte.

+0

Danke für Ihre Richtlinien. Bin dankbar. – Jogi

1

Sie verwenden falsche Variable Basicsalary und Erlaubnis, die nicht definiert ist. Ändern Sie Variablennamen aus salary zu basicsalary und figure-allowance

versuchen diese

var basicsalary = $('#basicSalary').val(); 
var allowance = $('#allowance').val(); 
$.ajax({ 
     url: '@Url.Action("updateSalary","salary")', 
     type: "GET", 
     dataType: "JSON", 
     data: { salary: basicsalary, figure: allowance }, 
     success: function (add) { 
      $('#basicSalary').val(add); 
     } 
    }); 
+0

Alles funktioniert wie erwartet @ Shamim. Jetzt ist das Problem mit 'Erfolg: Funktion (hinzufügen) { $ ('# basicSalary'). Val (Gehalt)' Codezeile. In diesen zwei Zeilen versuche ich, "Gehalt" von der actionMethod zu erhalten und es zu "basicSalary" -Feld hinzuzufügen. "Gehalt" wird als Jason zurückgegeben. Mit Hilfe von dubugger kann ich sehen, dass das erwartete Gehalt korrekt in Zeile 'return Json (Gehalt, JsonRequestBehavior.AllowGet) berechnet wird;' aber nicht irgendwie auf die Seite zurückkehrt und in das Feld 'basicSalary' hinzugefügt wird. Irgendeine Idee warum? – Jogi

+0

Entschuldigung, ich bin total neu in Ajax und JavaScript. – Jogi

+0

Bitte überprüfen Sie meine Bearbeitung, nachdem Sie Erfolg bekommen haben, fügen Sie diese Zeile '$ ('# basicSalary') hinzu. Val (add);' –

Verwandte Themen