我正在使用 ASP.NET 4 和 MVC3。
通常,我发现我需要一个 ViewModel 来显示我的模型的信息。例如,采用以下模型
class Profile
{
public int UserID { get; set; }
public string Name { get; set; }
public DateTime DOB { get; set; }
}
需要隐藏 UserID,但要显示 UserName,所以通常对于与上面类似的模型,我必须想出一个 ViewModel,只需将 UserID 更改为 UserName:
class ProfileViewModel
{
public string UserName { get; set; }
public string Name { get; set; }
public DateTime DOB { get; set; }
}
有什么办法吗?
直到最近,我总是将模型传递给操作方法,因为我还认为使用相同的属性名称创建 viewModel 是重复的(事实并非如此)。这给我造成了lot的痛苦。我现在已经接受了重新教育,并且几乎总是在我的操作方法中专门使用 viewModels(当然总会有一些情况可以将模型直接传递给操作方法)。
读一读this这篇文章让我开始使用 viewModels。这将告诉您以下信息:
- 模型和视图模型之间的区别
- 何时应分别使用。
- 如何避免默认模型绑定程序的一些安全问题。
除了链接帖子中的信息之外,您还应该考虑诸如验证之类的事情。我有一个模型实现了IValidateableObject
接口以确保实体在保存到数据库之前处于有效状态。
在我的 ASP.NET 应用程序中,我想创建一个多步骤表单,允许用户在多个页面上输入信息。我在这里遇到的问题是 ASP.NET 也使用IValidatableObject
模型绑定过程中的接口。
如果您只允许用户输入实体所需信息的子集,则模型绑定器将只能填写给定的信息。根据您的验证的复杂程度,这可能会导致ModelState
被标记为无效entire实体无效。
我解决这个问题的方法是使用一个 viewModel 来表示每个步骤,每个步骤都有自己的验证。这样您只需在每个步骤验证属性。一旦到达最后一步并且一切都有效,我就会使用用户提供的信息创建一个适当的实体。该实体将仅对其执行数据库级验证检查(字段长度等)
我的建议不是避免使用 viewModel,而是理解为什么使用它们并拥抱它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)