質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

Q&A

解決済

1回答

3348閲覧

ASP.NET MVCでModelStateの拡張メソッドを追加する方法を教えてください

abe.zikuu

総合スコア22

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

0グッド

0クリップ

投稿2016/07/09 05:16

編集2016/07/09 05:35

###前提・実現したいこと
ViewModelを共通で利用する場合で、RequireされているためModel.Stateで弾かれてしまいます。
そこで、ModelState.Removeで除外しようと思ったのですが、4個近くあるため配列で入れたいと思いその為のメソッドを作りましたが、ModelStateの拡張メソッドとして作ったほうがよろしいかと思いましたが、どうすればよいかわかりません。

###理想のソースコード

public static void Remove(this ModelStateDictionary ModelState, params string[] modelProperties) { foreach (var prop in modelProperties) ModelState.Remove(prop); } // 利用方法 ModelState.Remove("hoge1", "hoge2", "hoge3", "hoge4")

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

以下の様な形で実装頂ければと思います。

○拡張側

C#

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Web; 5using System.Web.Mvc; 6 7namespace MyExtension 8{ 9 public static class MyExtensionClass 10 { 11 public static void Remove(this ModelStateDictionary ModelState, ICollection<string> keys) 12 { 13 foreach (var prop in keys) 14 ModelState.Remove(prop); 15 } 16 } 17}


○利用側

C#

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Web; 5using System.Web.Mvc; 6using MyExtension; 7 8namespace MvcTest.Controllers 9{ 10 public class ExtensionTestController : Controller 11 { 12 // GET: ExtensionTest 13 public ActionResult Index() 14 { 15 this.ModelState.Remove(new[] { "hoge1", "hoge2", "hoge3", "hoge4" }); 16 return View(); 17 } 18 } 19}

投稿2016/07/10 12:20

編集2016/07/10 12:20
y-sakamoto

総合スコア194

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

abe.zikuu

2016/07/10 13:12

既に拡張用でクラスを切ってはいましたが、まったく動いていませんでした。 しかしご指摘された通りにしたら無事動きました。ありがとうございます。 原因は、どうやらクラスにstaticが足りていなかっただけのようでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問