也许这是一个愚蠢的问题,但我还没有发现......还没有。
我在 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 中的提交函数就会被调用。这将为我设置正确的值,然后将数据发布到控制器。