Javascript Ajax.BeginForm onBegin不设置值
也许这是个愚蠢的问题,但我还没发现。。。然而 我在MVC中有一个带有Ajax.BeginForm的视图。模型具有属性值(字符串)。这是视图的一部分:Javascript Ajax.BeginForm onBegin不设置值,javascript,asp.net-mvc-4,ajax.beginform,Javascript,Asp.net Mvc 4,Ajax.beginform,也许这是个愚蠢的问题,但我还没发现。。。然而 我在MVC中有一个带有Ajax.BeginForm的视图。模型具有属性值(字符串)。这是视图的一部分: @using (Ajax.BeginForm("Edit", "TheController", new AjaxOptions { UpdateTargetId = "Target", InsertionMode = InsertionMode.Replace, LoadingElementId = "loader",
@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"/>
}
例如,应在hiddenfield“Value”中设置100px
在提交论坛时,我希望“值”字段成为ANIT和AME度量的组合,但事实并非如此。我使用Chrome,当我检查元素时,我看到隐藏元素“value”中设置的正确值,但当我调试控制器时,该值为空
调试JS时,我看到调用了函数SetValues,并且在value元素中设置了正确的值。JS函数完成后,visualstudio会在控制器中的正确方法上断开断点
我似乎不明白为什么这不起作用。也许我处理这件事的方式不对
有人知道怎么做或者有更好的主意吗
更新
多亏了ryanulit和Scott MacMaster,我想出了这个:
我在表单中添加了一个ID,并添加了这个小JS脚本:
$(function(){
$("ID_OR_NAME_FORM").submit(function () {
... Do stuff
});
});
一旦表单被提交(并且在向控制器发送数据之前),Javascript中的submit函数就会被调用。这将为我设置正确的值,然后将数据发布到控制器。我想你是这个意思
function SetValues(){
$("#Value").val($("#anInt").val() + $("#aMeasurement").val())
}
我对此问题的解决方案非常简单:
$("#Form_Id_You_Have_To_Change").on("submit", function () { SetValues(); });
是的,但这只是一个例子。发布完整的代码会把人吓跑:)。我改变了原来的POST,我通常使用jquery而不是ajax扩展。但是,OnBegin()的文档说明“获取或设置要在页面更新之前立即调用的JavaScript函数的名称”。这并不清楚,因为这并没有说明这是否发生在发布之前或之后。可能不使用OnBegin,而是将“onclick='return SetValues();'”添加到submit控件中。您还可以在函数中输入“alert('Hi');”以查看何时调用它。或者使用“调试器;”来调用调试器,如果你觉得更可取的话。我也是这么想的。这方面的文档不是。。。很好。这可能是双向的。不管怎样,我会先试试你的想法,然后告诉你。我个人喜欢坚持使用ajax扩展,但如果没有其他wat来实现这一点……正如@ScottMacMaster所说,AjaxOptions类不允许任何方法在提交之前更新值。您将需要绑定到submit按钮的onclick事件,或者绑定到form submit事件并更改其中的值。这里有一些例子可以帮助你:谢谢大家。看我原来的帖子。我已经在那里添加了解决方案。使用Ajax表单和一些小的Javascript添加,它现在似乎可以正常工作。您是否尝试过在没有“()”的情况下使用OnBegin=“SetValues”?是的,但结果相同。Javascript函数被顺便调用(在原始帖子中更新)
$("#Form_Id_You_Have_To_Change").on("submit", function () { SetValues(); });