2010-03-31 39 views
0

我想使用ajax幫助程序創建ajax請求,以發送其他動態數據(例如,使用class = blogCommentDateTime獲取最後一個元素併發送最後一個值給控制器,它只會在它後面返回博客評論)。asp.net mvc ajax表單助手/發佈其他數據

我已經成功地這樣做使用jQuery形式的幫助插件像這樣:

$(document).ready(function() { 
     $("#addCommentForm").submit(function() { 

      var lastCommentDate = $(".CommentDateHidden:last").val(); 
      var lastCommentData = { lastCommentDateTicks: lastCommentDate }; 
      var formSubmitParams = { data: lastCommentData, success: AddCommentResponseHandler } 

      $("#addCommentForm").ajaxSubmit(formSubmitParams); 
      return false; 
     }); 

這種形式與html.beginform()方法創建。

我想知道是否有一個簡單的方法來使用ajax.beginform()助手做到這一點?當我嘗試使用相同的代碼,但用ajax.beginform()替換html.beginform()時,當我嘗試提交表單時,我發出2個帖子(這是可以理解的,一個正在照顧的我不能創建2個請求,所以這個選項是)

我試圖擺脫返回false並將ajaxSubmit()更改爲ajaxForm(),以便它只會「準備」表單,並且這隻會導致一個帖子,但它不包含我定義的額外參數,所以這也是毫無價值的。

然後我試着保留ajaxForm(),但調用每當表單上的提交按鈕被點擊而不是當表單被提交時(我猜這是幾乎相同的事情)並且導致2個帖子。

我問這個問題的最大原因是我遇到了一些與上面的JavaScript問題,並使用mvc框架提供的mvc驗證(我將設置另一個問題),並想知道這一點所以我可以進一步深入我的驗證問題。

+0

您是否找到解決方案? – cdpnet 2010-04-18 04:56:06

回答

1
function beginPost() { 
     $("form").ajaxSubmit({ data: { id: "idnum", random: "randomness"} }); 
     return false;   
    } 


using (Ajax.BeginForm(new AjaxOptions{ UpdateTargetId = "TargetDiv", OnBegin = "beginPost" }) 

到目前爲止,這是我能想出的最佳方式。這是一個黑客,因爲它覆蓋了ajax幫助程序爲您和上例中的初始接線(它會正確返回我的局部視圖,但我的ajax幫助程序中給出的updatetargetid不會保留,所以它基本上拋棄了響應,我可以在.ajaxSubmit調用中修復這個設置這個ID,但是這會否定使用ajax幫助器的優點)我想我會堅持我以前使用jQuery表單插件和html helper寫出我的表單的方法。在上面的例子中,我通過調用.ajaxSubmit手動提交它,然後返回false,以便頁面不會繼續並在ajax幫助程序連線時發佈。我的另一種方法,我認爲是一個巨大的破解(我甚至沒有嘗試)是試圖在名稱屬性設置爲我想要的附加數據被傳遞到控制器,並在beginPost方法中執行此操作。

我會堅持正常的形式,並與jQuery插件連接。