C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

ASP MVCのValidation /まるじろう (18/10/30(Tue) 11:33) #89074
Re[1]: ASP MVCのValidation /WebSurfer (18/10/30(Tue) 12:00) #89075
  └ Re[2]: ASP MVCのValidation /まるじろう (18/10/31(Wed) 14:58) #89102
    └ Re[3]: ASP MVCのValidation /WebSurfer (18/10/31(Wed) 15:05) #89104
      └ Re[4]: ASP MVCのValidation /まるじろう (18/11/02(Fri) 16:39) #89165
        └ Re[5]: ASP MVCのValidation /まるじろう (18/11/02(Fri) 18:05) #89169 解決済み


親記事 / ▼[ 89075 ]
■89074 / 親階層)  ASP MVCのValidation
□投稿者/ まるじろう (3回)-(2018/10/30(Tue) 11:33:52)

分類:[ASP.NET (C#)] 

ASP MVCで検証条件を設定したいのですが可能でしょうか。

public class TestModel
{
        [DisplayName("フィールド1")]
        [Required(ErrorMessage = "{0}は必須です。")]
        public string Field1 { get; set; }

        [DisplayName("フィールド2")]
        [Required(ErrorMessage = "{0}は必須です。")]
        public string Field2 { get; set; }
}

例えばボタン1押下時はField1のみ検証し、
ボタン2押下時はField2のみ検証するといった感じです。
Modelを別々に作成するしかないでしょうか。

[ □ Tree ] 返信 編集キー/

▲[ 89074 ] / ▼[ 89102 ]
■89075 / 1階層)  Re[1]: ASP MVCのValidation
□投稿者/ WebSurfer (1632回)-(2018/10/30(Tue) 12:00:56)
No89074 (まるじろう さん) に返信

CustomValidationAttribute を使うことを検討してはいかがですか?

以下のスレッドでの私の提案を見てください。

MVC モデルのバリデーションについて
https://teratail.com/questions/80391

上の記事の FLG に代えてどちらのボタンがクリックされたかの情報を送信できれば
質問者さんがやりたいことは可能だと思います。

[ 親 89074 / □ Tree ] 返信 編集キー/

▲[ 89075 ] / ▼[ 89104 ]
■89102 / 2階層)  Re[2]: ASP MVCのValidation
□投稿者/ まるじろう (4回)-(2018/10/31(Wed) 14:58:24)
色々試していて遅くなりました。
ありがとうございます。
無事実装できました。

[ 親 89074 / □ Tree ] 返信 編集キー/

▲[ 89102 ] / ▼[ 89165 ]
■89104 / 3階層)  Re[3]: ASP MVCのValidation
□投稿者/ WebSurfer (1639回)-(2018/10/31(Wed) 15:05:22)
No89102 (まるじろう さん) に返信

> 無事実装できました。

可能でしたら、どのように実装したかを書いていただけると、参加者の方々や
後から検索などでここを訪れる人に有用な情報提供になると思います。
[ 親 89074 / □ Tree ] 返信 編集キー/

▲[ 89104 ] / ▼[ 89169 ]
■89165 / 4階層)  Re[4]: ASP MVCのValidation
□投稿者/ まるじろう (6回)-(2018/11/02(Fri) 16:39:09)
>可能でしたら、どのように実装したかを書いていただけると、参加者の方々や
>後から検索などでここを訪れる人に有用な情報提供になると思います。 
そうですね

1つ目はご教示頂いたCustomValidationを使う方法です。
    [CustomValidation(typeof(TestModel2), "ValidateSampleModel")]
    public class TestModel2
    {
        public string Flag1 { get; set; }

        public string Field1 { get; set; }

        public string Field2 { get; set; }

        public string Field3 { get; set; }

        public static ValidationResult ValidateSampleModel(TestModel2 model, ValidationContext context)
        {
            // ここで検査を行う。
            if ("1".Equals(model.Flag1))
            { 
                if (String.IsNullOrEmpty(model.Field1))
                {
                    return new ValidationResult("Field1は必須です。");
                }
            } 
            else 
            {
                if (String.IsNullOrEmpty(model.Field2))
                {
                    return new ValidationResult("Field2は必須です。");
                }
            }
            return ValidationResult.Success;
        }
    }


こちらの方法も考えました。
Modelにモデル共通のチェックは定義し、メソッド毎に違うチェックはメソッド毎に記述する。
私的にはこちらの方がシンプルのように思えました。
        public ActionResult Execute1(TestModel2 model)
        {
            // ここで検査を行う。
            if (String.IsNullOrEmpty(model.Field1))
            {
                ModelState.AddModelError("Field1", "Field1は必須です。");
            }
            if (!ModelState.IsValid)
            {
                return View("Index");
            }
            
            return View("Index");
        }


        public ActionResult Execute2(TestModel2 model)
        {

            // ここで検査を行う。
            if (String.IsNullOrEmpty(model.Field2))
            {
                ModelState.AddModelError("Field2", "Field2は必須です。");
            }
            if (!ModelState.IsValid)
            {
                return View("Index");
            }
            
            return View("Index");
        }

[ 親 89074 / □ Tree ] 返信 編集キー/

▲[ 89165 ] / 返信無し
■89169 / 5階層)  Re[5]: ASP MVCのValidation
□投稿者/ まるじろう (8回)-(2018/11/02(Fri) 18:05:34)
解決済みとします。
解決済み
[ 親 89074 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -