从模型中控制视图中的默认值 - EF CORE

时间:2017-11-17 14:31:22

标签: asp.net-core-mvc entity-framework-core

我已使用两者

为模型中的布尔值设置默认值
    [DefaultValue(true)]

public bool IsActive { get; set; } = true;

并且我已经添加了

    modelBuilder.Entity<modelName>().Property(p => p.IsActive).HasDefaultValue(true);

一切正常,我的数据库表具有正确的&#34;默认值或绑定&#34;。在我的“创建”视图中,我希望使用默认属性,但无法查看如何在视图中使用模型的默认属性。使用

<input asp-for="IsActive"  class="form-control" checked="checked"/>

有效,但我自己硬编码checked="checked"值。如何在视图中阅读模型的默认值?

针对请求的代码进行了编辑,模型为

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace securitytrials.Models {
    public class CaseType {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int TheID { get; set; }
        [Display(Name = "Active")]
        public bool IsActive { get; set; } = true;
    }
}

动作方法是模板生成的默认方法。

public IActionResult Create() {
    return View();
}

没有包含它们,因为除了默认值之外没有那么多。 DbContext.OnModelCreating只是

protected override void OnModelCreating(ModelBuilder modelBuilder) {
        modelBuilder.Entity<CaseType>().Property(p => p.IsActive).HasDefaultValue(true);
    }

1 个答案:

答案 0 :(得分:0)

DefaultValue实际上并没有任何事情。在某些情况下,代码生成器可以使用它,但主要是在Web应用程序的上下文中,它完全没有意义。作为docs详细信息:

  

DefaultValueAttribute不会导致使用属性的值自动初始化成员。您必须在代码中设置初始值。

HasDefaultValue只为列设置DEFAULT,因此您可能也需要它,如果您希望实际的表架构反映默认值,但唯一真正有助于您的代码的是:

public bool IsActive { get; set; } = true;

你所要求的并不完全清楚。因为在显示该默认值的输入中单独应该没有问题。换句话说,以下代码:

<input asp-for="IsActive" class="form-control" />

将生成:

<input type="textbox" class="form-control" checked="checked" />

如果不是,那么您的模型存在一些问题。要么您对已添加默认值的类感到困惑,要么代码中的其他内容在更改该值之前会更改该视图。但是,如果没有更多的代码可以使用,就像你的行动方法一样,这是不可能的。