2013-10-28 24 views
1

在創建新對象時,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,但這不會是一個好主意,因爲它會隱藏任何其他問題。

job-object

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 Error

正如艾倫低於所指出的,ModelState中是inval在進入SubmitForm控制器操作時立即生成id。

+0

請張貼您的實際控制器代碼。你在屏幕截圖上展示的是統一的POST動作,然後將視圖模型發送給其他一些動作方法(非常糟糕的主意,BTW)。問題可能在於該過渡,但沒有爲此表示的代碼。 –

+1

@ChrisPratt我也在研究這個項目。在第一個SubmitForm控制器操作中立即出現問題,因爲ModelState立即認爲相關的Job模型存在問題。即使Job屬性被手動設置,ModelState仍然會在初始綁定中出現錯誤。這是需要解決的問題,而不是它交給的下一個控制器操作。 你能否詳細說明爲什麼一個交給他人的統一行動是一個壞主意?我們這樣做是因爲我們已經構建了一個框架,所以這是一次編碼,而不是每個控制器。 –

回答

1

我正在與OP一起工作。原來,這是Job模型中的一個問題。工作中的CurrencyID導致了一個ModelState錯誤,這個錯誤非常奇怪,因爲它甚至沒有顯示在視圖中。在模型中仔細檢查時,CurrencyID被標記爲int64時出現不一致?但具有必需屬性。這確實是一個必填字段,所以我將其更改爲Int64,並且工作正常。

相關問題