C# 为列表中的复杂类型创建视图初始化值
我在一个常见的问题中使用了这个答案。 这适用于编辑数据,但不适用于在需要立即向列表中添加复杂类型时创建数据 如果在控制器中执行创建操作,则应创建C# 为列表中的复杂类型创建视图初始化值,c#,asp.net-mvc,C#,Asp.net Mvc,我在一个常见的问题中使用了这个答案。 这适用于编辑数据,但不适用于在需要立即向列表中添加复杂类型时创建数据 如果在控制器中执行创建操作,则应创建AssignSoftwareLicenseViewModel的实例,并创建ICollection设备的实例。之后,您必须创建SelectableDeviceViewModel的实例,并将其添加到集合中。然后将创建的AssignSoftwareLicenseViewModel返回到视图中 所有的文本框都创建得很好,帖子也能正常工作。但由于您创建了对象的实例
AssignSoftwareLicenseViewModel
的实例,并创建ICollection设备
的实例。之后,您必须创建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);
}
public ActionResult Create()
{
AssignSoftwareLicenseViewModel vm=新的AssignSoftwareLicenseViewModel();
vm.Devices=新集合();
添加(新的SelectableDeviceViewModel());
返回视图(vm);
}
将您的模型属性声明为可为空的类型,您不应该有这个问题
public DateTime? BirthDay { get; set; }
public int? LicenseId { get; set; }
是的,但是我的数据库和ef代码首先被破坏了。我可以用viewmodel解决这个问题,但我想知道它是否可以用另一种方法解决。如果首先使用代码,您确实需要重新初始化数据库,这是一个问题吗?这对我来说不是一个真正的问题,但通过重新设计后端来修复ui问题是错误的。我想不创建viewmodel是不可能的