【问题标题】:Default value in mvc model using data annotation使用数据注释的 mvc 模型中的默认值
【发布时间】:2014-07-12 10:50:33
【问题描述】:

是否可以使用数据注解为 int 属性添加默认值

类似

[DefaultValue=1]
public int MyId {get; set;}

【问题讨论】:

标签: c# .net asp.net-mvc


【解决方案1】:

试试这个 - 在构造函数中设置默认值:

public class YOURMODEL
{
    public int MyId { get; set; }  

    public YOURMODEL()
    { 
        MyId = 1;       
    }
}

其他用户稍后添加:自 C# 6.0 (2015) 起,允许使用这种更简单的语法:

public class YOURMODEL
{
    public int MyId { get; set; } = 1;
}

【讨论】:

    【解决方案2】:

    使用[DefaultValue(false)]

    (Reference)

    【讨论】:

    【解决方案3】:

    构造方法当然是正确的(根据@Nilesh),但是这个解决方案没有解决您可能已经在数据库中创建的任何遗留数据。

    您还可以通过生成迁移然后调整 AddColumn 方法来更新您的旧数据...

    AddColumn("dbo.Orgs", "MyId", c => c.Int(nullable: false));
    

    更改为:

    AddColumn("dbo.Orgs", "MyId", c => c.Int(nullable: false, defaultValue: 1));
    

    注意,这还将创建一个数据库触发器,该触发器将自动更新 INSERT 上的默认值,因此从技术上讲,从数据库的角度来看,您不需要构造函数方法,但使用构造函数设置值仍然是最佳做法。

    【讨论】:

      【解决方案4】:

      您只能使用类的构造函数来执行此操作。因此,您的代码应如下所示:

      public class MyModel
      {
          public MyModel()
          {
              MyId = 1;
          }
      
          public int MyId {get; set;}
      }
      

      这将导致每当创建类的新实例时,MyId 属性被设置为 1。但是,如果模型绑定检测到用户为MyId 指定了一个值,它将用用户指定的值覆盖默认值。

      【讨论】:

        【解决方案5】:
        using System.ComponentModel;
        
        namespace EMS.Models
        {
            public class Admission
            {
                [DefaultValue(false)]
                public Boolean LCStatus { get; set; }
        
                [DefaultValue("India")]
                public string Country{ get; set; }
            }
        }
        

        【讨论】:

        • 虽然这段代码可能会解决问题,但一个好的答案应该解释代码的什么以及它如何提供帮助。
        • 您可以从此 [链接] (codeproject.com/Articles/66073/…) 了解有关 DefaultValue 属性 的更多信息
        猜你喜欢
        • 2011-10-10
        • 2017-01-25
        • 1970-01-01
        • 2017-11-19
        • 2018-05-26
        • 1970-01-01
        • 2014-09-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多