[解決済み] ASP.NET MVCコントローラのアクションパラメータとして配列を受け取るには?
2023-04-08 05:37:04
質問
ASP.net の MVC コントローラである
Designs
というコントローラがあり、次のようなシグネチャを持つアクションがあります。
public ActionResult Multiple(int[] ids)
しかし、urlを使用してこのアクションに移動しようとしたとき。
http://localhost:54119/Designs/Multiple?ids=24041,24117
は
ids
パラメータは常に null です。MVC で
?ids=
URLクエリパラメータをアクションの配列に変換するMVCを取得する方法はありますか?私はアクションフィルタを使用する話を見たことがありますが、私の知る限り、それは配列がURL自体ではなく、リクエストデータで渡されるPOSTに対してのみ機能します。
どのように解決するのですか?
デフォルトのモデルバインダーはこのURLを想定しています。
http://localhost:54119/Designs/Multiple?ids=24041&ids=24117
へのバインドを成功させるために
public ActionResult Multiple(int[] ids)
{
...
}
また、これをカンマ区切りの値で動作させたい場合は、カスタムモデルバインダーを書けばよいでしょう。
public class IntArrayModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (value == null || string.IsNullOrEmpty(value.AttemptedValue))
{
return null;
}
return value
.AttemptedValue
.Split(',')
.Select(int.Parse)
.ToArray();
}
}
で、このモデルバインダーを特定のアクションの引数に適用することができます。
public ActionResult Multiple([ModelBinder(typeof(IntArrayModelBinder))] int[] ids)
{
...
}
のすべての整数配列のパラメータに適用することもできます。
Application_Start
で
Global.asax
:
ModelBinders.Binders.Add(typeof(int[]), new IntArrayModelBinder());
で、コントローラアクションは次のようになります。
public ActionResult Multiple(int[] ids)
{
...
}
関連
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み] 2つのリストを結合する
-
[解決済み] ファイルアップロード ASP.NET MVC 3.0
-
[解決済み] ASP.NET MVC Frameworkで複数のサブミットボタンを処理する方法は?
-
[解決済み] ASP.NET MVCでenumからドロップダウンリストを作成するにはどうすればよいですか?
-
[解決済み] ASP.NET MVCでビューをコンパイルする
-
[解決済み] ASP.NET MVCコントローラは、Imageを返すことができますか?
-
[解決済み】Html.ActionLinkを使用して別のコントローラのアクションを呼び出す
-
[解決済み] ASP.NET MVC Controllerにフォームを使わずに文字列の配列を投稿するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】Sequence contains no matching element(シーケンスにマッチする要素がない
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015
-
[解決済み] クエリ文字列の中で配列を渡すには?