Измените введенные значения ввода 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;
            }, "");