控制器中的JavaScript不触发方法

时间:2016-06-04 09:38:17

标签: javascript c# asp.net asp.net-mvc

我正在尝试使用以下代码在控制器中触发Action方法。

<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>

剃刀:

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

控制器:

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);
        }

当用户选择allowance下拉列表时,基本上basicSalary会被添加到网页上的allowance字段中。我在updateSalary dropdownList中更改选择时,在allowance Action方法的括号中设置断点来检查javaScript是否在控制器中触发它。它没有开火。我无法弄清楚为什么。有人能看出原因吗?

2 个答案:

答案 0 :(得分:1)

这里有一些拼写错误:

data: { salary: basicsalary, figure: allowance }

应该是:

data: { salary: salary, figure: figure }

给出您在updateSalary javascript函数开头声明的变量的名称。

为了跟踪此类问题,我建议您使用浏览器的开发人员工具栏。例如,如果您使用的是Google Chrome浏览器,则可以单击 F12 将其激活,然后在Console标签中查找javascript错误。此外,在处理与您一样的AJAX查询时,您可以查看Network选项卡,该选项卡将显示发送到服务器的所有请求以及相应的响应。这可以很好地指出问题所在。

答案 1 :(得分:1)

您使用的是未定义的错误变量 basicsalary allowance 。将变量名称从salary更改为basicsalary,将figure更改为allowance

试试这个

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);
        }
  });