WhiteList子类通过Bind

时间:2016-12-19 15:50:01

标签: asp.net-mvc

有没有办法通过属性将子类列入白名单?

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 个答案:

答案 0 :(得分:1)

您在问题中包含的方法是唯一的方法。绑定适用于已发布的值。换句话说,它正在查看表单数据中的键名。在这方面,没有VoteType密钥,永远不会:只发布该类的属性,即VoteType.Description

尽管如此,使用Bind不仅非常糟糕,但将其与视图模型结合使用绝对没有意义。 Bind的重点是允许您在实体类中包含/排除属性的子集。同样,视图模型的整个目的是仅处理视图需要使用的数据。因此,如果您不希望在帖子中包含属性,不会将其放在视图模型上。即便如此,视图模型还需要注意数据必须映射到实体类或从实体类映射到它们。这使您能够明确决定将要映射的内容和将不会映射的内容。例如,如果您在视图中出于某种原因需要Id,但您不希望用户能够更改它,则只需将其从视图模型中映射回您的实体。