0

我有这个模型:

public class Employee {
    public int EmployeeId { get; set; }
    [Required(ErrorMessage = "Employee Name is Required.")]
    public string Name { get; set; }

    public SkillSet SkillSet { get; set; }
}

public class SkillSet {
    public int SkillSetId { get; set; }
    public string ProgrammingLanguage { get; set; }

    public int EmployeeId { get; set; }
    public Employee Employee { get; set; }
}

使用在表单中呈现的局部视图:

@Html.HiddenFor(x => x.EmployeeId)
<div class="row">
    <div class="span3"><strong>Name</strong></div>
    <div class="span2">@Html.TextBoxFor(x => x.Name, new { @class = "" })</div>
</div>
@Html.HiddenFor(x => x.SkillSet.SkillSetId)
@Html.HiddenFor(x => x.SkillSet.EmployeeId)
<div class="row">
    <div class="span3"><strong>Programming Skills</strong></div>
    <div class="span2">@Html.TextBoxFor(x => x.SkillSet.Programming, new { @class = "" })</div>
</div>

我通过返回 Employee 的新实例进行发布来填充表单,但是当我尝试保存新记录时,ModelState 中出现关于SkillSet.SkillSetId新记录为空的错误。

我在这里缺少什么来将新的父子记录添加到我的数据库中?

编辑:我现在可以开始工作了。我的问题只是为我的表单渲染隐藏字段。我不得不将隐藏字段放在一个 div 中,它们渲染得很好,我能够处理回发的数据。

4

1 回答 1

0

您发布的代码不足以得出一些结论,但我可以告诉您:控制器/视图和模型之间似乎没有问题,它似乎是数据库中的问题。

在您的技能表(无论您如何称呼它)中,ID 似乎SkillSetId应该定义为 key 和 identifier

我在您的模型中注意到并且不喜欢的另一件事是您有一个循环引用(Employee 指向 SkillSet,SkillSet 指向 Employee)。Entity Framework 不喜欢它,并且可能会导致您没有预料到的问题。由于它是一个视图模型,它可以,但如果您的数据库以相同的方式定义 - 考虑重新定义它。

希望这对您的解决方案有所帮助。

于 2012-09-23T13:31:36.010 回答