asp.net-mvc - 在MVC4中为ViewModel设置默认值的适当方法?

标签 asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我有一个viewModel包含以下内容:

public class CreateCardViewModel
    {
        [HiddenInput(DisplayValue = false)]
        public int SetId { get; set; }

        [Required]
        public IList<Side> Sides { get; set; }

        [Required]
        public int Stage { get; set; }

        [Required]
        [DataType(DataType.Date)]
        [HiddenInput(DisplayValue = false)]
        public DateTime DateCreated { get; set; }

        [Required]
        public bool IsReady { get; set; }

    }

该模型如下:
public class Card
    {

        public virtual int CardId { get; set; }

        // belongs to a Set
        public virtual int SetId { get; set; }
        public virtual Set Set { get; set; }

        // has Sides
        public virtual IList<Side> Sides { get; set; }

        // is in a certain Stage
        public virtual int Stage { get; set; }

        // is ready to study
        public virtual bool IsReady { get; set; }

        public virtual DateTime DateCreated { get; set; }

    }

如何设置DateCreated的默认值?

如果要在创建卡片时将空白的Side插入Sides中,方法会改变吗?

最佳答案

您可以在构造函数中设置默认值:

public CreateCardViewModel()
{
    DateCreated = DateTime.Now;
    Sides = new List<Side> { new Side() };
}

警告:从单元测试的角度来看,使用DateTime.Now存在一个问题。如果您正在对ViewModel的创建进行单元测试,并且需要能够验证创建的日期是否设置为已知值,则可以考虑创建一个单独的时间概念,如Ayende's blog中所述。您基本上可以创建一个静态函数SystemTime,您可以在测试中将其设置为一个已知值。如果未设置,则默认为DateTime.Now:
public static class SystemTime
{
    public static Func<DateTime> Now = () => DateTime.Now;
}

然后,您的构造函数代码将变为:
public CreateCardViewModel()
{
    DateCreated = SystemTime.Now();
    Sides = new List<Side> { new Side() };
}

如果需要将时间实际设置为已知值,请执行以下操作:
SystemTime.Now = () => new DateTime(2013, 2, 11, 17, 41, 12);

关于asp.net-mvc - 在MVC4中为ViewModel设置默认值的适当方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14817114/

相关文章:

c# - 这是不推荐使用的编码方式吗? ASP.Net MVC

c# - MVC4 表单提交后显示 twitter bootstrap 警报

asp.net-mvc - Durandal KO 绑定(bind) View 问题

asp.net-mvc - IIS 7 上的 ASP.net MVC 返回空白页面

javascript - IE 中的 JQuery 错误,适用于 FF。可能live有问题

javascript - 为单页应用程序 (SPA) 编译 HTML 片段?

asp.net-mvc-3 - 创建不影响 session 超时的操作

c# - ASP.NET MVC RouteExistingFiles 问题

asp.net-mvc-3 - ReSharper 无法解析 Razor

c# - 使用 MYSQL : System. DllNotFoundException : MySql. Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity 在 .NET MVC 4 应用程序中出现错误