2010-10-01 27 views
8

我用這樣的更新與局部視圖一個div:如何使用Ajax.BeginForm更新div並執行javascript函數?

<% using (Ajax.BeginForm("Action", "Controller", 
       new { id=Model.id }, 
       new AjaxOptions 
       { 
        UpdateTargetId = "divId", 
        InsertionMode = InsertionMode.InsertAfter, 
       })) 
    { %> 

及其工作正常,返回的視圖獲取appened到div,但我現在需要時,職位是執行一個javascript成功了,所以我想:「很簡單,只需將OnSuccess = "MyJsFunc()"」添加到AjaxOptions,但是這樣做後,它就停止工作了!現在頁面刷新,只有返回的局部視圖呈現:(,我甚至嘗試過一個簡單的Alert("Hi"),它的工作也不正常。的https://stackoverflow.com/questions/1994754/execute-javascript-after-loading-a-mvc-page-using-ajax-beginrouteform一個DUP,但這個問題得到了與沒有答案廢棄)

+0

+1在這個問題上;我相信我自己也看到了同樣的行爲;使用ASP.NET 4.0與MVC2和C#。每次我將一個OnSuccess成員值添加到AjaxOptions時,Ajax表單似乎變成了常規表單。我剛剛開始使用jQuery.form來提交這些表單,但我也想弄清楚這一點! – 2010-10-01 16:11:56

+0

嗯我也在使用ASP。NET 4和MVC2和C# – 2010-10-01 16:15:29

+0

[將JavaScript函數分配給AjaxOptions OnSuccess屬性引發錯誤 - ASP.NET MVC]可能的重複(http://stackoverflow.com/questions/695729/assign-a-javascript-function-to -ajaxoptions-onsuccess-property-raise-an-error -a) – bzlm 2011-04-09 21:38:17

回答

16

任何不以正確的方式做的理由(畢竟我們在2010年)?轉儲MS AJAX所在的位置以及依賴它的所有Ajax.*助手,並編寫正確的代碼。在傳統的webforms中使用MS AJAX可能會因爲UpdatePanel等原因而被證明是合理的...現在在新的ASP.NET MVC應用程序中執行此操作,特別是在Microsoft完全支持jQuery之後,似乎是一個糟糕的主意。

所以咆哮後,這裏是我的建議:

<% using (Html.BeginForm("Action", "Controller", new { id = Model.id }) { %> 

,然後裝上提交處理程序悄悄地使用jQuery在一個單獨的文件:

$(function() { 
    $('form').submit(function() { 
     $.ajax({ 
      url: this.action, 
      type: this.method, 
      success: function(result) { 
       // feel free to execute any code 
       // in the success callback 
       $('#result').html(result); 
      } 
     }); 
     return false; 
    }); 
}); 

或使用優秀jquery form plugin

$(function() { 
    $('form').ajaxForm(function(result) { 
     // feel free to execute any code 
     // in the success callback 
     $('#result').html(result); 
    }); 
}); 

這種方法的好處:

01無頭痛:
  • 不顯眼的
  • 標記和JavaScript
  • 緩存JavaScript文件和減少帶寬使用

獎金利益之間的明確分離。

+0

如何將模型ID傳遞給.ajax函數? – 2011-03-28 09:45:25

+0

@尼克馬索,你可以把它作爲隱藏的領域內的形式。 – 2011-03-28 13:38:16

+0

@Nick Masao,你也可以在傳遞給ajax選項的選項塊中包含一個'data'選項。 I.E. $ .ajax({...,data:{id:@ Model.id},...}); – Brian 2011-04-13 01:28:49