是否有一种标准方法为在ASP.NET MVC2中使用集合的对象实现Edit表单?

时间:2011-05-06 14:55:36

标签: asp.net asp.net-mvc asp.net-mvc-2 forms

给出一个只有字段的非常简单的对象,例如:

class Contact {

   string firstName;
   string lastName;
   DateTime birthday;
   ...
}

当您添加一个带有视图内容“创建”的强类型视图时,您会得到一个很好的表单,其中包含对象的所有字段,将表单传递回控制器等,生活很美好。

然而,当对象变得稍微复杂时,比如我们想要存储联系人的电子邮件地址(当然,联系人当然可以有多个电子邮件地址):

class Contact {

   string firstName;
   string lastName;
   DateTime birthday;
   ICollection<EmailAddress> emailAddresses;
   ...
}

现在,当您使用视图内容“创建”添加强类型视图时,您将获得与之前相同的格式,并且该集合不会以任何方式显示在表单中。

所以现在你有一个完整的表单,有一个例外:你想添加一个部分,用户可以根据自己的喜好输入尽可能多的电子邮件地址,并将这些地址包装起来并传递给Controller提交。

在ASP.NET MVC2中是否有标准的最佳实践方法?如果是这样,它是什么?

2 个答案:

答案 0 :(得分:2)

嗯,可以想象,你可以把整个观点都放在

HTML.EditorForModel()

如果您按照我的回答发布到How to display the content of asp.net cache?,则允许编辑对您的模型进行深入研究。

这不是最佳解决方案。操作MVC中的List数据是HARD。主要是因为多年的ASP.NET开发使我们与网络的金属脱节,以至于编辑列表客户端的概念很容易在我们身上丢失。

对于使用列表,您还很可能需要使用客户端模板才能轻松添加新元素和删除元素。这可能会变得非常复杂,因为事实上MVC要求所有列表都要编入索引并按照数字进行操作,否则在帖子后面你会丢失项目(除了:我觉得这是一个糟糕的设计决定

现在有了这个说法,我建议查看KnockoutJSKnockoutMapping框架,结合使用jQuery和jQuery模板,可以创建非常丰富的客户体验。遗憾的是,这很可能与您现有的开发风格背道而驰,但我觉得Knockout带来的是革命性的,并且将为ASP.NET MVC开发人员提供更多的网络。

答案 1 :(得分:2)

MVC3可以更好地处理这个问题,但是当您使用MVC2时,请查看Steve Sanderson's detailed post on Editing a variable length list, ASP.NET MVC 2-style

Phil Haack's Model binding to a list还为您提供有关默认MVC2模型绑定器如何处理列表

的更多信息