ASP.NET MVC 4 - 外键对象设置为id为0的某个默认对象

时间:2013-10-28 17:00:38

标签: c# asp.net-mvc entity-framework

在创建新对象时,使用MVC4遇到一些问题并使用外键编写第一个EF6代码。

我有两个模型(Job和JobItem),JobItem的JobID是作业模型上ID的外键关系。

当插入JobItem时,ModelState报告它无效并返回错误声明需要作业模型上的另一个字段。代码访问JobItem模型的JobID属性(由表单上的用户选择)但似乎EF正在创建id为0的Job对象并使用一些默认值填充它。

从ModelState返回的错误是Billing currency字段是必需的。结算货币是作业模型中的必填字段。

我可以设置Job对象并清除ModelState,但这不是一个好主意,因为它会隐藏任何其他问题。

job-object

JobItem Model

[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错误 ModelState Error

正如Alan所述,当进入SubmitForm控制器操作时,ModelState立即无效。

1 个答案:

答案 0 :(得分:1)

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

相关问题