ASP.NET Core MVC – HTMLフォームデータを送信する

この記事を書いたチーム:frontier
ASP.NET Core MVC - HTMLフォームデータを送信する 株式会社Smallit 技術ブログ

ASP.NET Core MVCでHTMLフォームデータを送信する方法には複合型と単純型の二つがあります。ここではごくごく簡単なサンプルコードを用いて動きを確認していきます。 

Controller 

【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc.  詳細はこちらから>

サブミットされたHTMLフォームデータを受け取るControllerを用意します。 

複合型-HTMLフォームでサブミットする 

サブミットするHTMLフォームを記述したViewを用意します。 

「送信」ボタンを押すと<form>に定義したasp-controllerasp-actionにもとづいてHTMLフォームのデータがサーバーにサブミットされます。この例ではasp-controllerにJson、asp-actionにComplexがそれぞれ定義されているので、HTMLフォームのデータは/Json/ComplexにPOSTします。 

JsonControllerComplexメソッドは引数にUpdateクラスが定義されています。HTMLフォームでサブミットされたデータは自動的にUpdateクラスにバインドされます。 

複合型-Ajaxでフォームを送信する 

HTMLフォームではなくAjaxでフォームデータをサブミットするにはどのようにすればいいでしょうか。ここではポピュラーであるjQueryを使って試していきます。 

まずは<form>の属性を次のように修正します。 

次にサブミットが行われたときの処理をJavaScriptで記述します。 

Url.Actionメソッドでフォームのデータを送るURLを生成しています。この例では、シリアライズしたフォームデータを/Json/ComplexにPOSTしています。 

JsonControllerのComplexメソッドは引数でUpdateクラスが定義されていることを思い出してください。<form>でサブミットしたときとおなじように、Ajaxでフォームデータを送信してもUpdateクラスにバインドされます。 

単純型 

フォームのデータをクラスにバインドさせずに文字列や配列として処理したいこともあるのではないでしょうか。このようなときは、名前(Key)と値(Value)のうち名前を空文字列にしてPOSTします。 

次のフォームを記述します。 

 次にサブミットが行われたときの処理をJavaScriptで記述します。 

 dataが$(‘#form’).serialize()から{ “”: $(‘#status’).val() }に変わっていることに気がついたでしょうか。Controllerでクラスにバインドさせずに文字列として処理を行いたい場合は名前(Key)を空文字列にします。 

JavaScriptを実行すると、JsonControllerSimpleに定義されているvalue変数にフォームで入力した状態(id=“status”)が代入されていることがわかります。 

文字列ではなく配列を扱いたいときも名前(Key)を空文字列にします。次の例では一次元配列にAとBとCの文字を格納しています。 

JavaScriptを実行すると、JsonControllerSimpleArrayに定義されているvalues配列にAとBとCの文字がそれぞれ格納されいてることがわかります。 

【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>

Smallitのサービス