2017-08-23 13 views
-1

データアノテーションでいくつかのバリデーションを適用しましたが、何とかコードに何か不足しています。部分クラスのASP.NET MVCデータアノテーションが機能しません

public class Person 
{ 
    public people SinglePerson { get; set; } 
    public IEnumerable<SelectListItem> ColorNames { get; set; } 
    public IEnumerable<SelectListItem> WebCustomer { get; set; } 
    public IEnumerable<SelectListItem> PreviouslyOredered { get; set; } 
} 

、ここでは私のCSクラスは

ある
[MetadataType(typeof(peopleMetaData))] 
public partial class people 
{ 
} 

public class peopleMetaData 
{ 
    [Required(ErrorMessage = "Please enter a name")] 
    [StringLength(50, MinimumLength = 2)] 
    public string firstName { get; set; } 
} 

Peopleクラスは、私はいくつかの検証を行いたいfirstName性質を有しています。

私には何が欠けていますか?モデルはあなたが人々クラスfirstNameの性質を持っていない

if (ModelState.IsValid) { 
    //do something 
} 
else 
{ 
return View(); 
} 
+0

コントローラのモデルのチェックを適用しましたか? –

+0

こんにちは、何の確認? – laz

答えて

0

、最初にあなたの人々のクラスであることを必要とします完全なプロパティとして「プロパティ」 - ちょうどタイプと名前が必要とされている - は、これを試してみてください。

public class peopleMetaData 
{ 
    [Required(ErrorMessage = "Please enter a name")] 
    [StringLength(50, MinimumLength = 2)] 
    public string firstName; 
} 

を参照してくださいません -には{ get; set; }を「プロパティ」はこちら

+0

それが問題でした。応答していただきありがとうございます。 – laz

+0

@laz心配はありません:) – OrElse

0

あなたがチェックする必要があります。 あなたはメタデータクラスでは、ビュー

+0

キャッチをありがとう。今は動作していますが、検証メッセージが表示されません。 – laz

+0

ありがとう、私はちょうどそれを確認していた。あなたは正しいです@O – laz

+0

もしあなたが他の答えを避けるために正しいと答えてマークすることができれば歓迎します –

0

コントローラで有効であるかどう

+0

"人々"が自動生成されます。 LINQ to SQLレイヤーでインポートしたその名前のSQLテーブルがあります。 – laz

2

@section Scripts { @Scripts.Render("~/bundles/jqueryval") } が含まれている、あなたは指定できませんことを確認し、クライアント側の検証のために、その後MetadataTypeClass

[MetadataType(typeof(peopleMetaData))] 
public partial class people 
{ 
    public string firstName { get; set; } 
} 
+0

私の解決策は{get; set;}で指定されました。何らかのコードの可読性のためにソリューションから離しておく方が良いですか? – laz

+0

@laz:何をやったの? –

+1

"jqueryval"を(@OrElseで提案されているように)レイアウトページに追加しました。コントローラで "Model.IsValid"を使用しました(@moath najで提案されているように) – laz

1

部分クラスは1つのプロジェクト内にしか存在できません。

http://msdn.microsoft.com/en-us/library/wa80x488(v=vs.100).aspx

具体 、

同じアセンブリと同じモジュール(.exeまたはで定義する必要があり、同じタイプの部品であることを意味すべての部分型の定義。 dll ファイル)。部分定義は複数のモジュールにまたがることはできません。

関連する問題