ポストパラメーターをコントローラーのアクションパラメーターにバインドする方法は?

ウラドラドゥ

アクションは次のようなものです。

[AllowAnonymous]
[HttpPost]
public async Task<IActionResult> Update(int id, string userName, string firstName, string lastName, string email, string role, string returnUrl = null)
{ 
    ...
}

アプリをデバッグすると、リクエストでnullでなくても、メソッドの本体でパラメーターは常にnullになります。

0%5Bid%5D=10&1%5BuserName%5D=Mike99&2%5BfirstName%5D=Mike&3%5BlastName%5D=Johnson&4%5Bemail%5D=mike.johnson%40live.com&5%5Brole%5D=user

http投稿

ルーティング構成:

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
    });
};

リクエストはAjaxによって行われます:

$.post("/Users/Update", postData)
    .done(function (data) {
        row.find(".changed").attr('class', 'editable');
        dataTable.draw();
    });

Postmanでヒットすると、アクションは正しいデータを取得するようです。jQueryによって送信されるデータが気に入らないだけです。

したがって、問題は次のようになります。AJAXによって送信されたデータを適切にフォーマットする方法は?

Postmanから送信されたデータ:

id=10&userName=Mike99&firstName=Mike&lastName=Johnson&email=mike.johnson%40mail.com&role=user

AJAXによって送信されたデータと比較してください。

0%5Bid%5D=10&1%5BuserName%5D=Mike99&2%5BfirstName%5D=Mike&3%5BlastName%5D=Johnson&4%5Bemail%5D=mike.johnson%40live.com&5%5Brole%5D=user

postDataを使用すると、次のようになりますconsole.log(postData)

{0: {…}, 1: {…}, 2: {…}, 3: {…}, 4: {…}, 5: {…}}
0: {id: 10}
1: {userName: "Mike99"}
2: {firstName: "Mike"}
3: {lastName: "Johnson"}
4: {email: "[email protected]"}
5: {role: "user"}

postData構築方法は次のとおりです。


 var row = $(this).parents("tr");
                        var id = [{ id: dataTable.row(row).data().Id }];

                        divFields = row.find("div.editable").map(function () {
                            var value = this.className === "editable changed" ? this.innerText : null;
                            return {
                                [this.dataset.name]: value
                            }

                        }).get();

                        selectFields = row.find("select.editable").map(function () {
                            var value = this.className === "editable changed" ? $(this).find(":selected").text() : null;
                            return {
                                [this.dataset.name]: value
                            }

                        }).get();

                        var fields = id.concat(divFields.concat(selectFields));

                        var postData = Object.assign({}, fields);
カークラーキン

あなたの例でfieldsは、フォームの値を表す配列を作成しています。これは、次のようになります。

[
    { id: 10 },
    { userName: "Mike99" },
    { firstName: "Mike" },
    { lastName: "Johnson" },
    { email: "[email protected]" },
    { role: "user" }
]

を使用するとObject.assign({}, fields)、のプロパティをfields新しいオブジェクトにコピーすることになりますが、これらのプロパティは0 ... 5です。これは、次のようなオブジェクトになってしまうことを意味します。

{
    0: { id: 10 },
    1: { userName: "Mike99" },
    2: { firstName: "Mike" },
    3: { lastName: "Johnson" },
    4: { email: "[email protected]" },
    5: { role: "user" }
}

これがjQueryによってapplication/x-www-form-urlencodedコンテンツタイプにシリアル化されると、ASP.NETCoreモデルバインダーでは解析できないものになります。あなたはすでにそれがどのように見えるかを質問に含めているので、ここでは繰り返しません。

(多くの可能性のある)1つの解決策...fields、次のよう、でスプレッド演算子(を使用することです。

Object.assign({}, ...fields)

これfieldsは、含まている個々のオブジェクトに分割され、結果のオブジェクトに割り当てられます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Angular 4.2.0 のコンポーネント プロパティにアニメーション入力パラメーターをバインドします。

分類Dev

エンドポイントからコントローラーとアクション名とともにパラメーターを取得する

分類Dev

あるビューから別のコントローラーのアクションメソッドにルーティングし、そのコントローラーのコンストラクターにパラメーターを渡す

分類Dev

コントローラーアクションの前にLaravelルートパラメーターにアクセスする方法はありますか?

分類Dev

kotlinのメインコンストラクターパラメーターにアノテーションを追加する方法

分類Dev

これらの2つのパラメーターをコントローラーアクションメソッドに渡す方法は?

分類Dev

コントローラーアクションでモデルのインスタンスをパラメーターにバインドするにはどうすればよいですか?

分類Dev

コンストラクターでのReactバインド、パラメーターを小道具に渡す方法

分類Dev

Ajax は null パラメーターをコントローラー アクションに送信します。

分類Dev

アクションとコントローラーの途中でURLパラメーターを使用する

分類Dev

アクションコントローラーパラメーターの管理

分類Dev

コンストラクターを通常のパラメーターとジェネリックパラメーターでオーバーロードする

分類Dev

DRF、APIエンドポイントのインターフェースパラメーターを他のプログラマーに伝達する方法は?

分類Dev

WebFlux:コントローラーのインターフェースパラメーターを逆シリアル化する方法は?

分類Dev

ASP.NET CoreコントローラーアクションでHTTP要求の本文全体を文字列パラメーターにバインドする、すぐに使用できる方法はありますか?

分類Dev

VueJS | コンポーネントのルーターパラメータにアクセスする方法

分類Dev

nextjsのgetInitialPropsstatelesコンポーネントでルーターパラメータにアクセスする方法

分類Dev

スーパーコンストラクターで呼び出されるオーバーライドメソッドにメンバーを使用する方法

分類Dev

C ++でメンバーのコンストラクターパラメーターを初期化する方法

分類Dev

コンストラクターを介してメソッドパラメーターをアクションフィルターに送信する

分類Dev

コード内のAmazonEMRブートストラップアクションにカスタムパッケージをインストールする方法は?

分類Dev

宣言/パラメーターが同じ場合にコンストラクター/関数をオーバーロードする方法は?

分類Dev

`<fx:include>`を使用するときにコントローラーのコンストラクターにパラメーターを渡す方法は?

分類Dev

Angular4コンポーネントの入力パラメーターをバインドする方法

分類Dev

認証されたユーザーをコントローラーのパラメーターにバインドする方法は?

分類Dev

認証されたユーザーをコントローラーのパラメーターにバインドする方法は?

分類Dev

コンストラクターからスロットにパラメーターを転送する方法は?

分類Dev

コントローラのアクションのパラメータをNinjectコンクリートタイプにどのように渡しますか?

分類Dev

コンストラクター内のポインターをパラメーター化する

Related 関連記事

  1. 1

    Angular 4.2.0 のコンポーネント プロパティにアニメーション入力パラメーターをバインドします。

  2. 2

    エンドポイントからコントローラーとアクション名とともにパラメーターを取得する

  3. 3

    あるビューから別のコントローラーのアクションメソッドにルーティングし、そのコントローラーのコンストラクターにパラメーターを渡す

  4. 4

    コントローラーアクションの前にLaravelルートパラメーターにアクセスする方法はありますか?

  5. 5

    kotlinのメインコンストラクターパラメーターにアノテーションを追加する方法

  6. 6

    これらの2つのパラメーターをコントローラーアクションメソッドに渡す方法は?

  7. 7

    コントローラーアクションでモデルのインスタンスをパラメーターにバインドするにはどうすればよいですか?

  8. 8

    コンストラクターでのReactバインド、パラメーターを小道具に渡す方法

  9. 9

    Ajax は null パラメーターをコントローラー アクションに送信します。

  10. 10

    アクションとコントローラーの途中でURLパラメーターを使用する

  11. 11

    アクションコントローラーパラメーターの管理

  12. 12

    コンストラクターを通常のパラメーターとジェネリックパラメーターでオーバーロードする

  13. 13

    DRF、APIエンドポイントのインターフェースパラメーターを他のプログラマーに伝達する方法は?

  14. 14

    WebFlux:コントローラーのインターフェースパラメーターを逆シリアル化する方法は?

  15. 15

    ASP.NET CoreコントローラーアクションでHTTP要求の本文全体を文字列パラメーターにバインドする、すぐに使用できる方法はありますか?

  16. 16

    VueJS | コンポーネントのルーターパラメータにアクセスする方法

  17. 17

    nextjsのgetInitialPropsstatelesコンポーネントでルーターパラメータにアクセスする方法

  18. 18

    スーパーコンストラクターで呼び出されるオーバーライドメソッドにメンバーを使用する方法

  19. 19

    C ++でメンバーのコンストラクターパラメーターを初期化する方法

  20. 20

    コンストラクターを介してメソッドパラメーターをアクションフィルターに送信する

  21. 21

    コード内のAmazonEMRブートストラップアクションにカスタムパッケージをインストールする方法は?

  22. 22

    宣言/パラメーターが同じ場合にコンストラクター/関数をオーバーロードする方法は?

  23. 23

    `<fx:include>`を使用するときにコントローラーのコンストラクターにパラメーターを渡す方法は?

  24. 24

    Angular4コンポーネントの入力パラメーターをバインドする方法

  25. 25

    認証されたユーザーをコントローラーのパラメーターにバインドする方法は?

  26. 26

    認証されたユーザーをコントローラーのパラメーターにバインドする方法は?

  27. 27

    コンストラクターからスロットにパラメーターを転送する方法は?

  28. 28

    コントローラのアクションのパラメータをNinjectコンクリートタイプにどのように渡しますか?

  29. 29

    コンストラクター内のポインターをパラメーター化する

ホットタグ

アーカイブ