c# – 在ASP.NET MVC中使用ViewModel类中的Bind属性

为什么开发人员可以在ASP.NET MVC项目中的ViewModel对象上使用Bind属性,这对应用程序有不利影响吗?

[Bind(Include = "Id,Name")]
[MetadataType(typeof (MyViewModelValidation))]
public class MyViewModel
{
    public string CustomerProductUserName { get; set; }

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

}

public class MyViewModelValidation
{
    [HiddenInput(DisplayValue = false)]
    public int Id { get; set; }

    [Required]
    public string Name{ get; set; }
}
首先,您不需要为ViewModel创建MetadataType类.您可以直接在ViewModel中使用数据注释属性. MetadataType类用于由EF或其他ORM自动生成的模型,以便您可以使用数据注释属性而不用触摸自动生成的代码.

除了要使用“绑定”属性的“包含”或“排除”属性之外,还可以使用“绑定”属性,以分别在模型中包含或排除绑定中的属性.

例如,在您的问题的代码中,只有从视图提交模型时,才会绑定Id和Name属性.即使您在View for CustomerProductUserName中有输入,当您提交表单时,该属性将始终为空.在不希望将自动生成的ID字段包含在绑定中的情况下,这可能很有用.

排除绑定的属性也被排除在验证之外,因为验证是作为模型绑定的一部分完成的.另外,出于安全考虑,您可以使用Bind属性;例如,当您想要确保只有模型中的属性被发布到控制器.

相关文章
相关标签/搜索