Подтвердить что ты не робот

Функция MVC Ajax.BeginForm OnSuccess не определена

Я пытаюсь заставить Ajax.BeginForm запускать функцию OnSuccess, но я продолжаю получать в firebug сообщение об ошибке:

UpdateProjectDiv is not defined
 return Function.constructor.apply(null, argNames); 

Вот как выглядит форма:

<script type="text/javascript">
    $(document).ready(function () {

        function UpdateProjectDiv() {
            var projid = $("#ddlProjectsManage").val();

            $.post("/Manage/ProjectEmployeeList/", { projectid: projid }, function (data) {
                populateDiv($("#divProjectsToFill"), data);
            });
        }

        function populateDiv(div, data) {
            div.html('');
            div.append(data);
        }

    });
</script>

@using (Ajax.BeginForm("MoveToProject", new AjaxOptions { UpdateTargetId = "divAllEmployeesToFill", OnSuccess = "UpdateProjectDiv" }))
{
    [insert non-relevant code here] 

    <input id="btnMoveEmpsToProject" type="submit" value=">>"  />
    @Html.Hidden("SelectedProjectID","9999999999999")
}

И действие моего контроллера:

[HttpPost]
public ActionResult MoveToProject(UnassignedEmployeeBindingModel model, int selectedprojectId)
{
    var tempteam = _db.SpecTeams.SingleOrDefault(s => s.Name == "N/A" && s.ProjectId == selectedprojectId);

    try
    {
        foreach (var employee in model.UnassignedEmployees)
        {
            var employeeObj = _db.Employees.SingleOrDefault(e => e.Id == employee.Employee.Id);

            if (employee.IsSelected)
            {
                employeeObj.SpecTeamId = tempteam.Id;
                _db.SaveChanges();
            }
        }

        return RedirectToAction("UnassignedEmployeeList");
    }
    catch (Exception)
    {
        return RedirectToAction("Index");
    }
}

Без кода OnSucess он отлично работает, за исключением того, что он не обновляет div в другом частичном (#divProjectsToFill) автоматически.

Кроме того, он, похоже, ищет функцию UpdateProjectDiv в файле jquery.unobtrusive-ajax.js, а не на самой странице. Я полагаю, что я мог бы добавить свою функцию в этот файл (хотя я еще не пробовал), но это не похоже на правильное решение.

Спасибо!

4b9b3361

Ответ 1

Разделите свои определения функций за пределами обработчика событий $(document).ready(...):

<script type="text/javascript">
    function UpdateProjectDiv() {
        var projid = $("#ddlProjectsManage").val();

        $.post("/Manage/ProjectEmployeeList/", { projectid: projid }, function (data) {
            populateDiv($("#divProjectsToFill"), data);
        });
    }

    function populateDiv(div, data) {
        div.html('');
        div.append(data);
    }

    $(document).ready(function () { /*... */});
</script>