也许这是一个愚蠢的问题,但我还没有找到它......但是。
我在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中的提交函数。这将为我设置正确的值,然后将数据发布到控制器。
答案 0 :(得分:2)
我对此问题的解决方案非常简单:
$("#Form_Id_You_Have_To_Change").on("submit", function () { SetValues(); });
答案 1 :(得分:0)
我认为你的意思是
function SetValues(){
$("#Value").val($("#anInt").val() + $("#aMeasurement").val())
}