是否可以修改onbegin
ajax.beginform
上发布的输入值?
我必须在提交表单后修改某些输入字段的值。但即使我通过js更改值,在request.form
的服务器端,我也会获得最初在表单提交时设置的旧值。如何在request.form中获取修改后的值?
代码块如下:
<% using(Ajax.BeginForm("action", "controller",
new AjaxOptions{onbegin="funBegin",oncomplete="funComplete"})){
%>
<input type="text" id="txtName" name="txtName" value="gaurav"/>
<input type="text" name="txtAge" value="26"/>
<input type="submit" value="click here" />
<% } %>
<script type="text/javascript">
function funBegin() {
$("#txtName").val("gaurav pandey");
}
function funBegin(result) {
$("#divParent").html(result.get_data());
}
</script>
现在,当我尝试在服务器端获取request.form["txtname"]
时,我得到的是“gaurav”,而不是“gaurav pandey”。
答案 0 :(得分:15)
我不想超出MVC的表单提交处理,所以我以不同的方式解决了这个问题。只需绑定到表单的提交按钮的单击处理程序即可。你的输入值是否在那里摆弄。 onclick在MVC的表单序列化之前被触发。即使用户点击输入提交表单,onclick也会被调用。
答案 1 :(得分:11)
您遇到此问题是因为在序列化表单数据后调用了funBegin
。来自MSDN:
AjaxOptions.OnBegin属性:获取或设置在页面更新之前立即调用的JavaScript函数的名称。
我建议您编写自己的提交处理程序:
<form id="myform" action="/Home/MyAction">
<input type="text" id="txtName" name="txtName" value="gaurav" />
<input type="submit" value="Submit" />
</form>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#myform').submit(function() {
$("#txtName").val("gaurav pandey");
var form = $(this);
var url = form.attr('action');
var formData = form.serialize();
$.post(url, formData, function(result) {
// Do something with result
});
return false;
});
});
</script>
答案 2 :(得分:2)
还有另一种方法:
function funBegin(jqXHR, settings) {
// before POST - change whatever posted value you want and then
// serialize again your form supposedly identified here by form
settings.data = form.serialize();
// the advantage is when you arrive here, the form validators have already been executed
// and you know you have valid values - so you can post
}
}
有关参数的含义,请参阅 [http://api.jquery.com/jquery.ajax/]
答案 3 :(得分:0)
$('#myform')。submit()不适用于IE。 如果有任何验证,您可以尝试创建一个虚假的验证方法来收集表单数据。
如下面的Jquery.validaton:
jQuery.validator.addMethod("fakeMethod", function (value, element) {
YOUR DOM CODE HERE!!!
return true;
}, "");