2016-12-19 7 views
0

属性を介してサブクラスをホワイトリストする方法はありますか?ホワイトリストのサブクラスを経由してバインド

public class VoteQuestionViewModel 
{ 
    [Display(Name = "Vote Question")] 
    public string Name { get; set; } 

    public VoteTypeViewModel VoteType { get; set; } 

}

public class VoteTypeViewModel 
{ 
    public int Id { get; set; } 

    [Display(Name = "Type of Question")] 
    public string Type { get; set; } 

    [Display(Name = "Description")] 
    public string Description { get; set; } 
} 

以下はホワイトリストクラスのプロパティに動作するだろうが、それはホワイトリスト子クラスのプロパティに動作しません。

public async Task<IActionResult> Create([Bind("Name, VoteType.Description")] VoteQuestionViewModel voteQuestion) 

答えて

1

あなたが含ま方法あなたの質問は唯一の方法です。バインドは、転記された値に対して機能します。言い換えれば、フォームデータのキー名を調べています。その点ではVoteTypeというキーはありません。投稿されたクラスのプロパティ(VoteType.Description)のみです。

しかし、Bindを使用することは非常に悪い習慣であるだけでなく、ビューモデルと組み合わせて使用​​することは全く意味がありません。 Bindの全体のポイントは、エンティティクラスにプロパティのサブセットを含める/除外できるようにすることです。同様に、ビュー・モデルの全目的は、ビューが処理する必要があるデータのみを処理することです。したがって、投稿にプロパティを含めることを望まない場合は、ビューモデルには入れないでください。それでも、ビュー・モデルにはエンティティ・クラスとの間でデータをマッピングする必要があるという特別な注意があります。これにより、マッピングされるものとされないものを明示的に決定することができます。たとえば、何らかの理由でIdが必要な場合でも、ユーザーが変更できないようにするには、ビューモデルからエンティティにマップするだけで済みます。

+0

良い点。最後にBind機能を取り除きます。私はViewModelだけを追加して作成し、AutoMapperを使用して最終的なモデルを作成しました。 – lucas

関連する問題