2016-09-30 16 views
1

私はデータベースを最初に使用しているので、ViewModelを介して自分の入力を検証します。しかし、それは検証のために十分であるか、それを追加するための書かれていないルールがあります。コントローラーで?MVC - ViewModelで十分に検証されていますか?

また、属性妥当性検査で最も一般的なものは何ですか?

[Required] 
[StringLength(50)] 
[MinLength(3)] 
public string Password { get; set; } 

これは有効な検証ですか?

+0

私は訂正してうれしく思いますが、これらの属性はHTMLを動的に設定するので、入力には 'required'属性が設定されます。しかし、私はこれまでサーバー側のチェックをしていることを思い出すことはできません。おそらくあなたのコントローラーのデータも消毒する必要がありますが、決して悪いことではありません。 –

+0

@DrewKennedy Aah私は参照してください。コントローラ内に検証を追加するための良いガイドがありますか? – Nyprez

+0

ガイドではありませんが、 'ModelState'を使って検証チェックを実行したり、' AddModelError'を使って問題を定義したり、プロパティを使ってエラーメッセージを定義することができます。 [これは良い例です](http://stackoverflow.com/a/21911236/4204026)。 –

答えて

2

属性の検証は、できることに完全に適しています。指定した検証属性に加えて、EmailAddress属性を使用して、指定されたプロパティを電子メールアドレスとして検証します。あなたがより複雑なカスタム検証を行うための正規表現の検証属性持っ

[EmailAddress(ErrorMessage = "Invalid Email Address")] 

その後:条件付きの検証と、そのような事柄について

[RegularExpression(@"^[a-zA-Z''-'\s]{1,40}$", 
     ErrorMessage = "Characters are not allowed.")] 

を、あなたのコントローラにそのロジックを追加し、ようにModelStateにエラーを追加することができます必要です。

例:

if (MyProperty == "something" && MyOtherProperty != "something") 
{ 
    ModelState.AddModelError("", "MyOtherProperty needs to be something") 
} 

あなたのコントローラロジックに、このような定型検証コードをしたくない場合は、独自のカスタム検証属性を記述することができます。これを行うことで、あなたが考えることができるものをかなり検証することができます。

インターネット上には、そのトピックに関する豊富なリソースがあります。

How to create a custom validation attribute?

How to create Custom Data Annotation Validators

数名に。

0

ModelState.IsValidを呼び出してModelStateの有効性をチェックすることを忘れないでください。この他にも、データベース検証の追加チェックを行う必要があると思います。

+0

追加のデータベース検証チェックでは、例えばどういう意味ですか? – Nyprez

+0

誰かがアカウントを登録したとします。彼によって入力された値は有効かもしれませんが、まだ入力されたユーザー名がまだ取られていないかどうかをデータベースにチェックインします。 – user1796440

+0

ああ私は見る!私はそのトラフのコントローラーをすると思いますか? 'Username'と言うことができます。 'Username'が既にデータベースに存在する場合(まだトラフコントローラ)、私は" already exists "エラーを返します。そうでない場合、 'Username'が追加されます。それは正しい方法ですか? – Nyprez

関連する問題