【问题标题】:Ajax.BeginForm onBegin does not set valuesAjax.BeginForm onBegin 不设置值
【发布时间】:2014-02-03 15:35:31
【问题描述】:

也许这是一个愚蠢的问题,但我还没有发现...。

我在 MVC 中有一个带有 Ajax.BeginForm 的视图。该模型具有属性值(字符串)。这是视图的一部分:

@using (Ajax.BeginForm("Edit", "TheController", new AjaxOptions {
    UpdateTargetId = "Target",
    InsertionMode = InsertionMode.Replace,
    LoadingElementId = "loader",
    OnBegin = "SetValues()"
})) {
    @Html.HiddenFor(x => x.Value)

    <label>A label</label>
    <input type="text" id="anInt"/>
    <select id="aMeasurement">
        <option value="px">PX</option>
        <option value="%">%</option>
        <option value="em">em</option>
    </select>

    <input type="submit" id="submitButton" value="Submit it"/>
}

函数SetValues:

function SetValues(){
    $("#Value").val($("#anInt").val() + $("#aMeasurement").val())
}

这应该设置,例如,隐藏字段“值”中的 100px。

提交论坛时,我希望字段“Value”成为 anInt 和 aMeasurement 的组合,但事实并非如此。我使用 Chrome,当我检查元素时,我看到隐藏元素“值”中设置了正确的值,但是当我调试控制器时,值是空的。

当我调试 JS 时,我看到调用了函数 SetValues,并且我还看到在 Value-element 中设置了正确的值。 JS 函数完成后,Visual Studio 在控制器中正确方法上的断点处中断。

我似乎无法弄清楚为什么这不起作用。或者我处理这个问题的方式不对。

有人知道怎么做或者有更好的主意吗?

更新

感谢 ryanulit 和 Scott MacMaster,我想出了这个:

我在表单中添加了一个 ID 并添加了这个小 JS 脚本:

$(function(){
    $("ID_OR_NAME_FORM").submit(function () {
        ... Do stuff
    });
});

一旦表单被提交(并且在向控制器发送数据之前),Javascript 中的提交函数就会被调用。这将为我设置正确的值,然后将数据发布到控制器。

【问题讨论】:

  • 你试过没有“()”的 OnBegin = "SetValues" 吗?
  • 是的,但结果相同。顺便调用了Javascript函数(原帖更新)

标签: javascript asp.net-mvc-4 ajax.beginform


【解决方案1】:

我对这个问题的解决方法很简单:

$("#Form_Id_You_Have_To_Change").on("submit", function () { SetValues(); });

【讨论】:

    【解决方案2】:

    我想你是这个意思

    function SetValues(){
        $("#Value").val($("#anInt").val() + $("#aMeasurement").val())
    }
    

    【讨论】:

    • 是的,但这只是一个例子。发布完整的代码会吓跑人们:)。我已经更改了原帖
    • 我通常使用 jquery 而不是 ajax 扩展。但是,OnBegin() 的文档说“获取或设置要在页面更新之前立即调用的 JavaScript 函数的名称。”这不清楚,因为这并没有说明这是否发生在帖子之前或之后。也许不要使用 OnBegin 而是将“onclick='return SetValues();'”添加到提交控件。你也可以输入“alert('Hi');”在你的函数中查看它何时被调用。或者使用“调试器;”如果您觉得更可取,则调用调试器。
    • 我也是这么想的。这方面的文档不是……很好。它可以双向进行。无论如何,我会尽快尝试你的想法并让你知道。我个人喜欢坚持使用 ajax 扩展,但如果没有其他 wat 来完成这个......
    • 正如@ScottMacMaster 所说,AjaxOptions 类不允许您在提交前更新值的任何方法。您需要绑定到提交按钮的 onclick 事件,或者绑定到表单提交事件并在那里更改值。以下是一些帮助示例:stackoverflow.com/questions/4043765/…codemonkeycode.net/index.php/2011/02/…
    • 谢谢大家。看我的原帖。我已经在那里添加了解决方案。使用 Ajax 表单和一些小的 Javascript 添加,似乎现在可以正常工作了。
    猜你喜欢
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    相关资源
    最近更新 更多