检查我的模型状态是否有效,将以不同方式处理键和非键属性

时间:2015-02-02 22:41:36

标签: asp.net asp.net-mvc asp.net-mvc-5 model-binding modelstate

我正面临这个我无法理解的问题,我有以下几点: -

  1. asp.net mvc5,我用DB第一种方法。

  2. 我为我的数据库表生成.edmx文件。

  3. 现在我有以下模型类,它是我自动生成的: -

    public partial class SkillLevelStaff
    {
        public int SkillID { get; set; }
        public int LevelID { get; set; }
        public int StaffID { get; set; }
        public string Version { get; set; }
    
        public virtual Level Level { get; set; }
        public virtual Skill Skill { get; set; }
        public virtual Staff Staff { get; set; }
    }
    

    此模型的PK是.edmx和DB中定义的StaffID + SkillID。现在我有以下动作方法,它接受上述模式类的集合: -

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> AssignStaffsToSkill(int? id , ICollection<SkillLevelStaff> skilllevelstaff)
    {
        try
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            var dbskill = new Skill();
            try
            {
                if (ModelState.IsValid)
    

    现在,如果我将skillid和levelid的空字符串传递给我的post action方法,那么模型绑定器会给它们一个零值,如下所示: -

    enter image description here

    并将引发以下错误

    ErrorMessage    "The LevelID field is required."    
    

    所以我无法理解的是以下内容: -

    1. 为什么模型状态没有引发SkillID所需的错误,就像它对levelid一样?原因可能是SkillId是PK的一部分吗?

    2. 在视图中我将为技能和水平ID传递空字符串(使用下拉列表),其中模型绑定器将自动指定零,因为它们是int,所以我的问题这就是为什么modelstate在值为零时引发了一个错误,即需要levelid?

    3. 有人可以就此提出建议吗?

0 个答案:

没有答案