11


1

ajax.beginformのonbeginで投稿された入力値を変更する

ajax.beginform`の onbegin`に入力された入力値を変更できますか? フォームが送信された後、いくつかの入力フィールドの値を変更する必要があります。 しかし、jsを介して値を変更しても、 `request.form`のサーバー側で、フォーム送信時に最初に設定された古い値を取得しています。 request.formで変更された値を取得する方法は?

コードブロックは次のとおりです。

<% using(Ajax.BeginForm("action", "controller",
     new AjaxOptions{onbegin="funBegin",oncomplete="funComplete"})){
%>





<% } %>


    function funBegin() {
        $("#txtName").val("gaurav pandey");
    }
    function funBegin(result) {
        $("#divParent").html(result.get_data());
    }

サーバー側で「request.form ["txtname"]」を取得しようとすると、「gaurav pandey」ではなく「gaurav」が取得されます。

4 Answer


15


MVCのフォーム送信処理の外に出る気はなかったので、これを別の方法で解決しました。 フォームの送信ボタンのクリックハンドラーにバインドするだけです。 そこで入力値をいじります。 onclickは、MVCのフォームのシリアル化の前に発生します。 onclickは、ユーザーが[.kbd]#enter#を押してフォームを送信した場合でも呼び出されます。


11


フォームデータがシリアル化された後に `funBegin`が呼び出されるため、この問題が発生しています。 MSDNから:

_ AjaxOptions.OnBeginプロパティ:ページが更新される直前に呼び出す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;
        });
    });


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/ [[http://api.jquery.com/jquery.ajax/]]を参照してください


0


  • $( '#myform')。submit()*はIEでは機能しません。 検証がある場合は、フォームデータを収集するための偽の検証メソッドを作成しようとすることができます。

以下のJquery.validatonのように:

jQuery.validator.addMethod("fakeMethod", function (value, element) {
                YOUR DOM CODE HERE!!!
                return true;
            }, "");