【问题标题】:.net Mvc 3 Ajax.BeginForm, get the form element.net Mvc 3 Ajax.BeginForm,获取表单元素
【发布时间】:2011-07-30 16:04:13
【问题描述】:

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

目前我有这个:

@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 和添加更多代码时'相信有更简单的方法。

【问题讨论】:

    标签: asp.net-mvc forms dom asp.net-ajax ajax.beginform


    【解决方案1】:

    表单的 ID 作为 Ajax.BeginForm 的第四个参数:

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

    然后您可以通过 ID (#FormName) 选择表单。

    编辑:

    或查看this question的答案

    【讨论】:

    • 我同意这是一个选项,但我不想在处理这些回调的通用库中添加特定的表单 ID。关注点分离等等,我宁愿处理程序以某种方式解决这个问题。
    • 这个签名在 MVC5 中不再起作用。它应该是 Ajax.BeginForm("Contact", "Home",null, new AjaxOptions, new HtmlAttributes 通知路由值的 null。
    【解决方案2】:

    我也查看了这些论点,但看不到任何可以开箱即用的东西。另一种选择是向您的库中添加一个函数,该函数将为您页面上的按钮添加一个 onclick 事件处理程序。类似的东西

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

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

    【讨论】:

    • 这不起作用,因为它将在 ajax 请求之前运行事件。 OnSuccess 和 OnComplete 发生在 ajax 请求之后,但是提交点击会发生在之前。
    【解决方案3】:

    将 CSS 类赋予您想要使用的 DOM 元素。所以你可以通过 CSS 类找到元素,即使表单是部分的,例如嵌套在其他元素中。

    类似这样的:

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

    【讨论】:

    • 如果你有很多 .labelToUpdate 怎么办 - 突然这变成了一个问题:(
    猜你喜欢
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    相关资源
    最近更新 更多