Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET MVC-复杂对象和表单_Asp.net_Html_Asp.net Mvc_Domain Driven Design - Fatal编程技术网

ASP.NET MVC-复杂对象和表单

ASP.NET MVC-复杂对象和表单,asp.net,html,asp.net-mvc,domain-driven-design,Asp.net,Html,Asp.net Mvc,Domain Driven Design,假设我们有一个域对象,如下所示 public class Person { public string Name { get; set; } public IList<PhoneNumber> PhoneNumbers {get; set; } public IList<Address> Addresses { get; set; } } 公共类人物 { 公共字符串名称{get;set;} 公共IList电话号码{get;set;} 公共IList地址

假设我们有一个域对象,如下所示

public class Person
{
   public string Name { get; set; }
   public IList<PhoneNumber> PhoneNumbers {get; set; }
   public IList<Address> Addresses { get; set; }
}
公共类人物
{
公共字符串名称{get;set;}
公共IList电话号码{get;set;}
公共IList地址{get;set;}
}
在输入姓名、电话号码和地址之前,此人无效。你们是如何使用ASP.NETMVC和表单处理这个问题的

我在想,你可以将这个人序列化到会话,并拥有多个视图,用于编辑姓名、添加电话号码、添加地址——控制器操作将修改会话中的人,最后的保存操作将推送到数据库

我真的不喜欢有多个视图和使用会话。另一种选择是使用一个非常复杂的表单,该表单可以包含元素的“动态”部分,用于在发布到保存操作之前在浏览器中添加/删除电话号码、地址

每个人都在通过表单处理复杂对象和编辑什么

谢谢

我通常使用“动态区段”路线


但是,我不会让您的验证过于严格,以至于用户无法保存正在进行的工作。电话号码、地址等的列表可能需要很长时间才能输入。如果最终用户失去互联网连接或其他东西,可以随时保存他们的工作,这对最终用户是有益的。如果您的数据输入表单非常大,那么不时通过AJAX自动保存记录可能是个好主意。(比如Gmail。)因此,你的模型应该允许他们不时地保存未完成的工作,并且只有在他们说“完成”时才运行整个验证。

谢谢Craig,我也喜欢这个想法。我认为从最终用户的角度来看,动态表单要容易得多。我的模型绑定器在处理动态字段时必须变得更智能一些,但我认为我们可以让它工作。Jimmy Nilsson主张在应用领域驱动的设计和模式时,在无效状态下进行保存。他主张您应该能够随时保存您的工作,但它必须在进入可接受状态之前通过验证。。。嗯,是时候试试AngularJS和WebApi了。发布模型的JSON表示。注意-如果您使用MVC绑定在JSON上也有“数组表示法”。。。。