我有一个 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
.
我想确保ParentTile
and 因此parentid
不能与Tile
自身相同,而且在所有其他递归关系模型中也使用相同的代码。
因此我的问题如下:
- 我可以使用通用属性附加到
parentid
模型中的任何内容以防止用户将自己分配给自己,如果可以,如何?