1

在创建新对象时,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 立即无效。

4

1 回答 1

1

我正在与 OP 合作。事实证明这是 Job 模型中的一个问题。作业中的 CurrencyID 导致了一个非常奇怪的 ModelState 错误,因为它甚至没有显示在视图中。在模型中仔细检查后发现 CurrencyID 被标记为 int64 的不一致?但具有必需的属性。这确实是一个必填字段,所以我将其更改为 Int64 并且它工作正常。

于 2013-11-01T15:28:49.993 回答