【问题标题】:Create view for complex type in list initializes values为列表中的复杂类型创建视图初始化值
【发布时间】:2014-03-26 14:47:47
【问题描述】:

我在一个常见问题中使用了这个答案https://stackoverflow.com/a/11682510/801005。 当您想立即将复杂类型添加到列表中时,这适用于编辑数据,但不适用于创建数据。

如果您在控制器中进行创建操作,您应该创建AssignSoftwareLicenseViewModel 的实例并创建ICollection<SelectableDeviceViewModel> Devices 的实例。之后,您必须创建SelectableDeviceViewModel 的实例并将其添加到集合中。然后将创建的AssignSoftwareLicenseViewModel返回给视图。

所有文本框都创建得很好,帖子也能正常工作。但是因为您创建了对象的实例,所以LicenseId 在您的屏幕上具有值0。如果您还有 DateTime 属性,您将在屏幕上的文本框中获得 01-01-0001 作为默认值。

如何删除这些值?我的显示属性现在没用了……

示例日期时间:

[Display(Name = "Geboortedatum")]
[Required]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime BirthDay { get; set; }

示例创建

public ActionResult Create()
{
    AssignSoftwareLicenseViewModel vm = new AssignSoftwareLicenseViewModel();
    vm.Devices = new Collection<SelectableDeviceViewModel>();
    vm.Devices.Add(new SelectableDeviceViewModel());

    return View(vm);
}

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    将您的模型属性声明为可空类型,您应该不会遇到这个问题。

    public DateTime? BirthDay { get; set; }
    public int? LicenseId { get; set; }
    

    【讨论】:

    • 是的,但是我的带有 ef 代码 First 的数据库已损坏。我可以用视图模型解决问题,但我想知道它是否可以通过其他方式解决
    • 如果使用代码优先,您确实必须重新初始化您的数据库,这是一个问题吗?
    • 嗯,这对我来说并不是真正的问题,但通过重新设计后端来解决 ui 问题是错误的。我想如果不创建视图模型是不可能的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 2012-11-21
    • 2018-08-15
    • 1970-01-01
    相关资源
    最近更新 更多