Ajax.BeginForm onBegin不设置值

时间:2014-02-03 15:35:31

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

也许这是一个愚蠢的问题,但我还没有找到它......但是。

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

@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,当我检查元素时,我在隐藏元素“Value”中看到了正确的值集,但是当我调试控制器时,Value为空。

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

我似乎无法弄清楚为什么这不起作用。或许我正在以错误的方式处理这个问题。

任何人都知道怎么做或有更好的主意?

更新

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

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

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

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

2 个答案:

答案 0 :(得分:2)

我对此问题的解决方案非常简单:

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

答案 1 :(得分:0)

我认为你的意思是

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