2011-04-05 3 views
10

내가 함수를 실행하는 내 Ajax.BeginForm을 얻으려고 onsuccess는하지만 불을 지르고있는 오류 메시지가 계속이 정의되지 않았습니다 :MVC Ajax.BeginForm onsuccess는 기능이

<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 잘 작동 코드없이, 그것은 할 제외 다른 부분 (#divProjectsToFill)에서 div를 자동으로 새로 고침하지 마십시오.

또한 페이지 자체가 아니라 jquery.unobtrusive-ajax.js 파일에서 UpdateProjectDiv 함수를 찾는 것 같습니다. 그 파일에 내 기능을 추가 할 수 있을지도 모르겠지만 (아직 시도하지는 않았지만) 적절한 해결책처럼 들리지는 않습니다.

감사합니다.

+3

당신은'$ (문서) .ready()'의 외부에서 (자바 스크립트) 함수를 정의하려고 했습니까? –

+0

그게 그렇게 간단하다고 믿을 수 없어 ... 고마워! 답으로 표시하여 해결 된 것으로 표시 할 수 있습니다. :) – LanFeusT

답변

20

$(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> 
+0

이유를 알려주십시오. 왜 $ (document) .ready (...) 이벤트 처리기 외부에서 함수 정의를 중단해야합니까? –

+2

@psylogic :'$ (document) .ready (...)'안에'UpdateProjectDiv'를 정의하면,'UpdateProjectDiv'는'ready' 함수에 넘겨주는 함수에 범위가 지정되어 ASP에 보이지 않게됩니다. NET MVC의 JavaScript. '$ (document) .ready (...) '함수 밖에서 정의하면 전역 적이며 ASP.NET MVC에서 사용할 수 있습니다. –

+1

@ psylogic : 도움이 되니 기쁩니다. 나는 이와 같은 글로벌 기능을 만드는 것이 일반적으로 좋지 않다는 것을 덧붙여 야합니다. 더 나은 방법은 "노출 모듈"패턴과 같은 패턴을 사용하여 네임 스페이스에 함수를 넣는 것입니다. –

관련 문제