Измените введенные значения ввода onbegin ajax.beginform
Можно ли изменить допустимые входные значения на onbegin
of 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".
Ответы
Ответ 1
У вас возникла эта проблема, потому что 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
Мне не хотелось выходить за рамки обработки заявок на MVC, поэтому я решил это по-другому. Просто привязывайтесь к обработчику нажатия кнопки формы. Сделайте там свое входное значение. Onclick запускается до сериализации формы MVC. Onclick также вызывается, даже если форма отправлена пользователем, нажав enter.
Ответ 3
Есть и другой способ:
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/]
Ответ 4
$('# myform'). submit() не будет работать в IE.
Если есть какая-либо проверка, вы можете попытаться создать метод поддельной проверки для сбора данных формы.
как JQuery.validaton ниже:
jQuery.validator.addMethod("fakeMethod", function (value, element) {
YOUR DOM CODE HERE!!!
return true;
}, "");