ASP.NET Web窗体模型绑定 - 插入时的默认值

时间:2016-01-12 02:26:13

标签: asp.net model-binding

我使用模型绑定遇到了使用默认值的catch 22。 Tom FitzMacken的教程有以下插入内容:

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 =卡住之前,我看不到如何为它赋值。

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

使用视图模型并避免此问题。是的,您在实体的映射方面有一些额外的工作,但您从未错过任何验证。视图模型仅包含将进入该请求的字段。

答案 2 :(得分:0)

静态默认值:

有一个System.ComponentModel.DefaultValueAttribute,但文档说 " DefaultValueAttribute不会导致成员使用属性的值自动初始化。 您必须在代码中设置初始值。"

我尝试使用get \ set&它没有设置DV!

然后我将这一行添加到从数据库生成的模型中。 (我首先使用数据库中的代码,因为这是我所有数据库设计的地方)

public tblInvestor()
this.Investor_ContactMethod = "Email"

此工作表示静态默认值&在必填字段上验证。 但它在生成的类和&我无法弄清楚如何使用我的元数据将其纳入我的单独部分课程中? 无法声明另一个公共tblInvestor() - 所以如何放置它?

DateTime默认值:

决定将其放在用户界面上。 或者不要求它&在TryUpdateModel和amp;之间设置它的SaveChanges。

相关问题