在创建新对象时,MVC4 和使用外键的代码优先 EF6 有点问题。
我有 2 个模型(Job 和 JobItem),其中 JobItem 具有 JobID 作为与 Job 模型上的 ID 的外键关系。
插入 JobItem 时,ModelState 报告它无效并返回错误,声称需要 Job 模型上的另一个字段。该代码访问 JobItem 模型的 JobID 属性(由用户在表单上选择),但似乎 EF 正在创建一个 ID 为 0 的 Job 对象并使用一些默认值填充它。
从 ModelState 返回的错误是 Billing currency 字段是必需的。计费货币是作业模型上的必填字段。
我可以设置 Job 对象并清除 ModelState 但这不是一个好主意,因为它会隐藏任何其他问题。
工作项模型
[Display(Name = "Job number")]
[Required]
[ForeignKey("Job")]
public Int64 JobID { get; set; }
public virtual Job Job { get; set; }
JobItem 编辑视图
<div class="csam-section-block">
<div class="editor-label">
@Html.LabelFor(model => model.Model.JobID)
</div>
<div class="editor-field">
@if (@Model.Model.Job == null)
{
@Html.TextBox("Model.Job.Number", String.Empty, new { @class = "csam-change-field" })
}
else
{
@Html.TextBoxFor(model => model.Model.Job.Number, new {@class="csam-change-field"})
}
@Html.HiddenFor(model => model.Model.JobID)
@Html.ValidationMessageFor(model => model.Model.JobID)
</div>
<div class="csam-lookup-section">
<input type="button" class="tbl_lookup_btn, csam-lookup-button" name='Job' value='Job,JobID' />
</div>
</div>
更新 1:显示 ModelState 错误
正如 Alan 所指出的,当进入 SubmitForm 控制器操作时,ModelState 立即无效。