2011-07-30 62 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