【问题标题】:How to handle validation for Relationship PK and FK in MVC5如何在 MVC5 中处理关系 PK 和 FK 的验证
【发布时间】:2017-09-27 18:19:25
【问题描述】:

嗨,我有 2 个表名 tblGrouptblSubGrouptblGroupGroupId 这是主要的 tblSubGroupGroupid 这是外键。 下面是为他们生成的模型

tblGroup 模型

public partial class tblGroup
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public tblGroup()
    {
        this.tblSubGroups = new HashSet<tblSubGroup>();
    }

    public int GroupID { get; set; }
    [Required(ErrorMessage = "Group Name is Required")]
    public string Title { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<tblSubGroup> tblSubGroups { get; set; }
}

tblSubGroup 模型

 public partial class tblSubGroup
{
    public int SubGroupID { get; set; }

    [Display(Name = "tblGroup")]
    public int GroupID { get; set; }
    [Required(ErrorMessage = "SubGroup Name is Required")]
    public string Title { get; set; }

    public virtual tblGroup tblGroup { get; set; }
}

现在在删除 From GroupTable 的记录时出现问题。相反,我需要validate 一条消息“此记录与另一个表或实体绑定。所以它不能被删除”。我需要展示这种信息。

由于我是新手,我不知道这件事是否可行

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-5


    【解决方案1】:

    由于您需要使用数据库进行验证,因此您将此类验证移至服务器。

    [HttpPost]
    public ActionResult Delete(Group group)
    {
        var grp = db.Group.FirstOrDefault(g => g.Id == group.Id);
    
        if (HasSubGroups(grp))
        {
            ModelState.AddError("DeleteValidation", "Cannot delete while sub-groups exists");
            return View(group);
        }
    
        // delete normally ... 
    }
    

    然后您可以通过多种方式在视图上显示错误。最简单的就是展示集合。

    @Html.ValidationSummary()
    

    【讨论】:

    • 这在模型方面是不可能的吗?
    • 您可以预先验证模型并隐藏删除操作。但是您仍然应该在服务器上进行验证。在任何情况下,数据库都会因为 FK 关系而抱怨。
    • 我可以知道如何实现 HasSubGroups 吗?
    • 默认生成私有 bool HasSubGroups(tblGroup grp) { throw new NotImplementedException(); }
    • 它只是一个辅助方法(可能在控制器类上)。您只需计算附加的实体。如果你有很多业务验证,你可以将它们收集到一个新的类中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    相关资源
    最近更新 更多