我正面临这个我无法理解的问题,我有以下几点: -
asp.net mvc5,我用DB第一种方法。
我为我的数据库表生成.edmx文件。
现在我有以下模型类,它是我自动生成的: -
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方法,那么模型绑定器会给它们一个零值,如下所示: -
并将引发以下错误
ErrorMessage "The LevelID field is required."
所以我无法理解的是以下内容: -
为什么模型状态没有引发SkillID所需的错误,就像它对levelid一样?原因可能是SkillId是PK的一部分吗?
在视图中我将为技能和水平ID传递空字符串(使用下拉列表),其中模型绑定器将自动指定零,因为它们是int
,所以我的问题这就是为什么modelstate在值为零时引发了一个错误,即需要levelid?
有人可以就此提出建议吗?