Asp.net mvc .net Mvc 3 Ajax.BeginForm,获取表单元素

Asp.net mvc .net Mvc 3 Ajax.BeginForm,获取表单元素,asp.net-mvc,forms,dom,asp.net-ajax,ajax.beginform,Asp.net Mvc,Forms,Dom,Asp.net Ajax,Ajax.beginform,我正在尝试使用表单dom元素和Mvc中Ajax.BeginForm助手的OnBegin&OnComplete例程 目前我有: @using (Ajax.BeginForm("Contact", "Home", new AjaxOptions { OnBegin = "handleOnBegin" })) 但是在OnBegin/OnComplete处理程序中,我想使用表单dom元素——这可能吗?我已经检查了传递给这些处理程序的参数,但什么都看不到 function handleOnBegin(a

我正在尝试使用表单dom元素和Mvc中Ajax.BeginForm助手的OnBegin&OnComplete例程

目前我有:

@using (Ajax.BeginForm("Contact", "Home", new AjaxOptions { OnBegin = "handleOnBegin" }))
但是在OnBegin/OnComplete处理程序中,我想使用表单dom元素——这可能吗?我已经检查了传递给这些处理程序的参数,但什么都看不到

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

我甚至尝试过用处理程序传递“this”,但这似乎只传递XHR对象或类似的东西。。。此外,我不愿意谈论传递id和添加更多代码,因为我相信有一种更简单的方法。

将id作为Ajax的第四个参数添加到表单中。beginfound:

@using (Ajax.BeginForm("Contact", "Home", 
        new AjaxOptions { OnBegin = "forms.onBegin", OnComplete = "forms.onComplete" },
        new { id = "FormName" }))
然后,您可以按ID FormName选择表单

编辑:


或者查看

为要使用的DOM元素提供CSS类的答案。因此,您可以通过CSS类找到元素,即使表单是部分的,例如嵌套在其他元素中

大概是这样的:

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

我也看了这些论点,看不出任何有助于开箱的东西。另一个选项是向库中添加一个函数,该函数将向页面上的按钮添加onclick事件处理程序。差不多

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

然后可以从回调函数访问clickedBtnID。这不是一个完美的解决方案,但可能足够通用。

我同意这是一个选项,但我不想在处理这些回调的通用库中添加特定的表单id。分离关注点和所有这些,我希望处理程序以某种方式解决这个问题。这个签名在MVC5中不再有效。它应该是Ajax.BeginFormContact、Home、null、new AjaxOptions、new HtmlAttributes Noitce routeValue的null。这不起作用,因为它将在Ajax请求之前运行事件。OnSuccess和OnComplete发生在ajax请求之后,但是submit单击将发生在之前。如果有许多.labelToUpdate,该怎么办?突然,这就成了一个问题: