Asp.net mvc 使用ValidationAttribute对递归关系进行MVC 4验证

Asp.net mvc 使用ValidationAttribute对递归关系进行MVC 4验证,asp.net-mvc,asp.net-mvc-4,recursion,validationattribute,Asp.net Mvc,Asp.net Mvc 4,Recursion,Validationattribute,我有一个MVC项目,在不同的模型中有几个递归关系。请参见下面的示例模型结构 例如: tileid和parentid(一个磁贴可以与多个磁贴相关) regionid和parentid(一个区域可以与多个区域相关) 我想创建一个名为PreventRecursiveParent的MVCValidationAttribute,它是动态的,可以在整个系统中使用,而不考虑模型,这会阻止用户将模型上的parentid分配给它自己。i、 e.防止父级和子级之间出现无限循环 e、 g。 缩短的样本模型如下所示

我有一个MVC项目,在不同的模型中有几个递归关系。请参见下面的示例模型结构

例如:

  • tileid和parentid
    (一个磁贴可以与多个磁贴相关)

  • regionid和parentid
    (一个区域可以与多个区域相关)

我想创建一个名为
PreventRecursiveParent
的MVC
ValidationAttribute
,它是动态的,可以在整个系统中使用,而不考虑模型,这会阻止用户将模型上的parentid分配给它自己。i、 e.防止父级和子级之间出现无限循环

e、 g。 缩短的样本模型如下所示:

  public partial class Tile
  {
      public Tile()
      {
        this.ChildTiles = new List<Tile>();
        this.TileRoles = new List<TileRole>();
        this.TileCompanies = new List<TileCompany>();
      }

    [Key]
    public int tileid { get; set; }

    [Required]
    [Display(Name = "Tile Header")]
    public string tileheading { get; set; }

    //This is a recursive relationship where a tile can have a parent, but not itself.
    [PreventRecursiveParent]  //--> Attribute I would like to create <--
    [Display(Name = "Parent Tile")]
    public Nullable<int> parentid { get; set; }

    public virtual Tile ParentTile { get; set; }
}
公共部分类平铺
{
公共瓷砖()
{
this.ChildTiles=新列表();
this.TileRoles=新列表();
this.TileCompanies=新列表();
}
[关键]
公共int tileid{get;set;}
[必需]
[显示(Name=“磁贴标题”)]
公共字符串tileheading{get;set;}
//这是一种递归关系,其中平铺可以有父级,但不能有其自身。

[PreventRecursiveParent]/-->属性我想创建一个听起来像您只想要一个
[NotEqualTo(“parentid”)]
属性,您可以应用到
tileid
regionid
(或其他方式)。如果你不想自己写,就写一本。我已经看过《万无一失》,我想这会有用的。谢谢你的反馈:)