MVC4 - 获取View中的字段列表

时间:2012-11-27 09:57:03

标签: asp.net-mvc asp.net-mvc-4

是否可以安全地以编程方式获取View中刚刚发布回Controller的字段列表?

我注意到脚手架的默认实现存在问题,在

DB.Entry(model).State = EntityState.Modified
DB.SaveChanges()

问题在于,如果我没有在视图中包含要编辑的字段,则会在创建对象时.NET指定的字段的默认值覆盖它。例如。如果我有一个带有ID,Email和PasswordHash的User类,我想让用户只更新他们的电子邮件地址,如果我没有为PasswordHash字段包含任何内容,它会被重置为NULL,因为它被传递到控制器为NULL。目前,我正在通过从数据库中检索当前对象并仅从传入的模型中更新我知道的视图中的字段来解决它。对于小型表来说这不是问题,但我会喜欢有一个我可以全面应用的通用解决方案,特别是对于可能在开发过程中使用的大型表,我不想每次都更新代码。

我知道我可以遍历POST变量并检查它们以查看已发布的内容,但这会产生安全问题,因为用户可能会注入我不希望他们编辑的其他字段。我想我可以明确地排除那些我不希望他们编辑的内容,但是再说一次,我宁愿不必列出那些,如果我可以避免它,因为这是一个额外的维护。

我认为这里有两个问题,我不确定是否可以解决......

  • 获取回发的视图
  • 确定该视图中包含哪些字段(我可能需要暂时再次构建它才能这样做?)

我想我可能会忽略第一个,因为我只能在Controller上使用该方法来获取单个视图。这仍然不如我想要的那么整洁,但它确实减少了只是在视图中确定哪些字段的问题。

1 个答案:

答案 0 :(得分:1)

如果视图仅需要某些属性,请创建仅包含这些属性的界面。在HttpGet和HttpPost方法中使用此接口。

然后你可以使用类似AutoMapper的东西将viewmodel映射到你的实体。