4

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

我在 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"/>
}

函数集值:

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

例如,这应该在隐藏字段“值”中设置 100 像素。

提交论坛时,我希望字段“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 中的提交函数就会被调用。这将为我设置正确的值,然后将数据发布到控制器。

4

2 回答 2

2

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

$("#Form_Id_You_Have_To_Change").on("submit", function () { SetValues(); });
于 2014-06-26T11:25:43.340 回答
0

我想你是这个意思

function SetValues(){
    $("#Value").val($("#anInt").val() + $("#aMeasurement").val())
}
于 2014-02-03T15:40:35.463 回答