2

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

例如:

  • tileid and parentid(一个图块可以关联多个图块)

  • regionid and parentid(一个区域可以关联多个区域)

我想创建一个ValidationAttribute名为MVC PreventRecursiveParent,它足够动态,可以在整个系统中使用,而不管模型如何,这会阻止用户将模型上的 parentid 分配给自己。即防止父母和孩子之间的无限循环。

例如,一个缩短的样本模型如下:

  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; }
}

当用户创建 时,这个问题并不重要,Tile因为他们当时无法分配parentid,而是当用户编辑Tile.

当用户编辑 a 时,Tile他们可以ParentTile从图块列表中选择 a,并将其分配给当前选定的Tile.

我想确保ParentTileand 因此parentid不能与Tile自身相同,而且在所有其他递归关系模型中也使用相同的代码。

因此我的问题如下:

  • 我可以使用通用属性附加到parentid模型中的任何内容以防止用户将自己分配给自己,如果可以,如何?
4

0 回答 0