在創建新對象時,MVC4存在一些問題,並且首先用外鍵代碼EF6。ASP.NET MVC 4 - 將外鍵對象設置爲某個ID爲0的默認對象0
我有2個模型(Job和JobItem),其中JobItem的JobID作爲外鍵關係到Job模型上的ID。
當插入到JobItem中時,ModelState報告它無效並返回一個錯誤,聲稱需要Job模型上的另一個字段。代碼訪問JobItem模型的JobID屬性(由用戶在表單上選擇),但似乎EF正在創建一個id爲0的Job對象並使用一些默認值填充該對象。
從ModelState返回的錯誤是需要記帳貨幣字段。帳單貨幣是工作模型上的必填字段。
我可以設置Job對象並清除ModelState,但這不會是一個好主意,因爲它會隱藏任何其他問題。
JobItem型號
[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中是inval在進入SubmitForm控制器操作時立即生成id。
請張貼您的實際控制器代碼。你在屏幕截圖上展示的是統一的POST動作,然後將視圖模型發送給其他一些動作方法(非常糟糕的主意,BTW)。問題可能在於該過渡,但沒有爲此表示的代碼。 –
@ChrisPratt我也在研究這個項目。在第一個SubmitForm控制器操作中立即出現問題,因爲ModelState立即認爲相關的Job模型存在問題。即使Job屬性被手動設置,ModelState仍然會在初始綁定中出現錯誤。這是需要解決的問題,而不是它交給的下一個控制器操作。 你能否詳細說明爲什麼一個交給他人的統一行動是一個壞主意?我們這樣做是因爲我們已經構建了一個框架,所以這是一次編碼,而不是每個控制器。 –