有没有办法通过属性将子类列入白名单?
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)
答案 0 :(得分:1)
您在问题中包含的方法是唯一的方法。绑定适用于已发布的值。换句话说,它正在查看表单数据中的键名。在这方面,没有VoteType
密钥,永远不会:只发布该类的属性,即VoteType.Description
。
尽管如此,使用Bind
不仅非常糟糕,但将其与视图模型结合使用绝对没有意义。 Bind
的重点是允许您在实体类中包含/排除属性的子集。同样,视图模型的整个目的是仅处理视图需要使用的数据。因此,如果您不希望在帖子中包含属性,不会将其放在视图模型上。即便如此,视图模型还需要注意数据必须映射到实体类或从实体类映射到它们。这使您能够明确决定将要映射的内容和将不会映射的内容。例如,如果您在视图中出于某种原因需要Id
,但您不希望用户能够更改它,则只需将其从视图模型中映射回您的实体。