2011-04-05 74 views
10

我試圖讓我的Ajax.BeginForm運行功能的onSuccess,但我一直在螢火收到錯誤消息:MVC Ajax.BeginForm的onSuccess函數沒有定義

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它工作正常的代碼,但它做esn't自動刷新另一個部分(#divProjectsToFill)中的div。

此外,它似乎尋找jquery.unobtrusive-ajax.js文件中的函數UpdateProjectDiv而不是頁面本身。我想我可能能夠在該文件中添加我的功能(雖然我還沒有嘗試過),但這聽起來不是一個合適的解決方案。

謝謝!

+3

你嘗試定義'$(文件)。就緒()'之外的(JavaScript)的功能? – 2011-04-05 21:16:28

+0

簡直不敢相信......謝謝!把它作爲答案,以便我可以將其標記爲已解決。 :) – LanFeusT 2011-04-05 21:22:36

回答

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(...)事件處理程序之外的函數定義? – 2015-09-08 09:16:48

+2

@psylogic:如果您在'$(document).ready(...)'內部定義'UpdateProjectDiv','UpdateProjectDiv'將被限制到您傳遞給'ready'函數的函數,因此ASP不可見。 NET MVC的JavaScript。當你在'$(document).ready(...)'函數之外定義它時,它是全局的並且可以被ASP.NET MVC使用。 – 2015-09-08 17:41:07

+1

@psylogic:很高興提供幫助。我應該補充說,創建像這樣的全局函數通常不是一個好習慣。一個更好的做法是將函數放入名稱空間,使用「揭示模塊」模式等模式。 – 2015-09-08 18:07:14

相關問題