2016-01-12 49 views
0

我使用模型綁定運行了默認值的catch 22。 湯姆FitzMacken本教程有以下插入:ASP.NET Web表單模型綁定 - 插入時的默認值

public void addStudentForm_InsertItem() 
{ 
    var item = new Student(); 

    TryUpdateModel(item); 
    if (ModelState.IsValid) 
    { 
     using (SchoolContext db = new SchoolContext()) 
     { 
      db.Students.Add(item); 
      db.SaveChanges(); 
     } 
    } 
} 

,但如果你有需要的領域,是不是在你的UI,說CreatedDate領域,TryUpdateModel將無法通過驗證。

在調用TryUpdateModel = stuck之前,我看不到如何爲其賦值。

回答

0

在致電TryUpdateModel(item);之前,您可以設置必填字段。當您一個CreatedDate場的例子(假設它的日期時間):

var item = new Student(); 
//set the value here 
item.CreatedDate = DateTime.Today;//.Now if you need the timestamp 

//required field now has value, this should succeed 
TryUpdateModel(item); 

另一種選擇,如果你在C#6的時候,你應該能夠提供一個默認值在模型中的特性:

public DateTime CreatedDate { get; set; } = DateTime.Today; 
+0

item.CreatedDate = DateTime.Today設定值,但 TryUpdateModel(項目),然後刷新所有的值(即使不是在你的UI) –

+0

@DerekMcLachlan調用'item.CreatedDate = DateTime.Today;''後TryUpdateModel(項目);' –

+0

Thanks @Drew,但TryUpdateModel(item)驗證並失敗,因爲缺少必需的日期,因此您無法在TryUpdateModel之後設置該值。 現在我堅持把它放在我的用戶界面中。 這是我的第一個問題,所以我磕磕絆絆。我編輯了我的問題,你有任何ide如何獲得靜態DV值從生成的類和我的部分類? –

0

使用視圖模型並避免該問題。是的,你有一些額外的工作來詮釋實體,但你永遠不會錯過驗證。視圖模型僅包含將要進入該請求的字段。

0

靜態默認值:

有一個System.ComponentModel.DefaultValueAttribute但文件說 「A DefaultValueAttribute不會導致成員與屬性的值被自動初始化 您必須設置的初始值。你的代碼。「

我試着用get \ set &建議的代碼,它沒有設置DV!

然後我將這1行添加到從數據庫生成的模型中。 (我使用的代碼首先從數據庫,因爲這是我做我所有的數據庫設計)

public tblInvestor() 
this.Investor_ContactMethod = "Email" 

這個工程一個靜態默認值&驗證在必填字段。 但它在生成的類&我無法弄清楚如何將它與我的元數據放入單獨的部分類中? 不能申報另一個公共tblInvestor() - 那麼怎麼把它放在哪裏呢?

日期時間默認值:

辭職,要麼把它的UI。 或使之不需要&將它設置爲TryUpdateModel & SaveChanges。