2011-07-30 102 views
4

我正在嘗試使用MVC中的Ajax.BeginForm幫助器的OnBegin & OnComgin例程與表單dom元素一起工作。.net Mvc 3 Ajax.BeginForm,獲取表單元素

目前我有這樣的:

@using (Ajax.BeginForm("Contact", "Home", new AjaxOptions { OnBegin = "handleOnBegin" })) 

但OnBegin /的onComplete處理程序中,我想用表格的DOM元素的工作 - 這是將是可能的嗎?我檢查了傳遞給這些處理程序的參數,我什麼也看不見。

function handleOnBegin(a, b){ 
    var f = <get form>; 
    animateForm(f); 
} 

我甚至試圖通過「本」與處理程序,但僅似傳XHR對象(或類似的東西)......另外,我不願意與通過ID和增加針鋒相對約因爲我確信有更簡單的方法。

回答

6

的ID添加到您的形式第四參數Ajax.BeginForm:

@using (Ajax.BeginForm("Contact", "Home", 
     new AjaxOptions { OnBegin = "forms.onBegin", OnComplete = "forms.onComplete" }, 
     new { id = "FormName" })) 

然後你可以選擇通過ID(#FormName)的形式。

編輯:

或者看到答案this question

+5

我同意這是一個選項,但我不想在處理這些回調的通用庫中添加特定的表單標識。分離顧慮和所有這些,我寧願處理程序以某種方式解決問題。 –

+2

此簽名不再適用於MVC5。它應該是'Ajax.BeginForm(「Contact」,「Home」,null,new AjaxOptions,new HtmlAttributes'Not the null for routevalues。 – ppumkin

0

給CSS類,你要使用的DOM元素。所以你可以通過CSS類找到元素,即使表單是部分的,並且嵌套在其他元素中。

事情是這樣的:

$form.find(".labelToUpdate").text(response.labelText); 
+1

如果你有很多'.labelToUpdate' - 突然變成問題:( – ppumkin

1

我看了一下參數也並不能看到任何東西,這將有助於開箱。另一個選擇是向庫中添加一個函數,該函數將爲頁面上的按鈕添加一個onclick事件處理函數。像

var clickedBtnID = null; 
$(document).ready(function()) { 
    $(input[type=submit]).click(function() { 
     clickedBtnID = $(this).attr("id"); 
    } 
} 

東西然後你可以從你的回調函數訪問clickedBtnID。不是一個完美的解決方案,但它可能足夠普遍。

+0

This將無法工作,因爲它會在ajax請求之前運行事件。OnSuccess和OnComplete發生在ajax請求之後,但是之前會發生提交點擊。 – AaronLS