2016-01-12 37 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。