0

aspx.net注文を追加するための大きなフォームを含むページがあります。
このページには、多数の注文明細を含むテーブルが含まれています。
オーダー ラインごとに、20 のフォーム フィールドと 5 つの非表示フィールドがあります。

注文を印刷するための印刷ボタンがありますが、その前にまず保存する必要があります。

私の問題は、 を使用する$("form").serializeArray()と、配列が 1 ~ 1.000.000 倍空になることです。
どのブラウザを使用しても問題ありません。


どこからデバッグを開始すればよいかわからないので、多くのユーザーがこの問題をできるだけ早く修正するように私に電話しているので、これは私を夢中にさせています。

  • 問題はserializeArray()ありますか?
  • それとも、postdata が大きすぎるか、破損している可能性がありますか?
  • たぶん、WebMethodいくつかの追加の属性が必要ですか?

ここに私の印刷ボタンがあります

<input type='button' title='Print' onclick='PrintOrder(true)' />
function PrintOrder(autosave) {
  if (autosave) {
    // save my order and call a callback function after it's completed
    AutoSaveForm(function () {
      PrintOrder(false);
    });
  } else {
    // show my pdf page
    window.open('printorder.pdf');
    return;
  }
}

var inAutoSaveForm = false;

// this function is needed to autosave my order
// fn is a callback function when it's successfull done.
function AutoSaveForm(fn) {
  if (!inAutoSaveForm) {
    // serializeArray to post my form by the ajax function
    var fields = $("form").serializeArray();

    // json format
    var myData = {
      'orderId': orderId,
      'fields': fields
    };

    myData = JSON.stringify(myData);

    ShowLoader();

    $.ajax({
      type: "POST",
      url: "/Order.aspx/AutoSave",
      contentType: "application/json; charset=utf-8",
      timeout: (1000 * 60 * 10),
      data: myData,
      dataType: "json",
      success: function () {
        setTimeout(function () {
          fn.call();
        }, 25);
      },
      error: function (x, t, m) {
        alert("Error, please try again later.\n\n" + t);
      },
      complete: function (msg) {
        // .. do nothing yet
      }
    });

    inAutoSaveForm = true;
  } else {
    fn.call();
  }
}

注文を保存するための .NET コードを次に示します。
多分私はいくつかの属性を WebMethod に入れなければなりませんか?

[WebMethod]
public static string VerwerkForm(field[] fields) {
    // do the magic
    return "ok";
}

public class field {
    public string name { get; set; }
    public string value { get; set; }
}
4

0 に答える 0