Asp.net mvc MVC4-获取视图中的字段列表

Asp.net mvc MVC4-获取视图中的字段列表,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,是否可以通过编程安全地获取视图中刚刚发布回控制器的字段列表 我注意到脚手架的默认实现有一个问题 DB.Entry(model).State = EntityState.Modified DB.SaveChanges() 问题是,如果我没有在视图中包含要编辑的字段,它将被.NET在创建对象时指定的字段的默认值覆盖。例如,如果我有一个ID为、Email和PasswordHash的用户类,并且我只想允许用户更新他们的电子邮件地址,如果我没有在PasswordHash字段中包含任何内容,它将被重置为N

是否可以通过编程安全地获取视图中刚刚发布回控制器的字段列表

我注意到脚手架的默认实现有一个问题

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

我知道我可以循环使用POST变量并检查它们以查看发布的内容,但这会造成安全问题,因为用户可能会插入我不希望它们编辑的其他字段。我想我可以明确地排除那些我不想让他们编辑的内容,但是再一次,如果我可以避免的话,我不想列出那些内容,因为这是一件额外的事情需要维护

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

  • 获取已发布的视图
  • 确定该视图中包含哪些字段(我可能需要临时重新构造它来实现这一点?)

我想我可以忽略第一个,因为我只能在控制器上为单个视图使用该方法。这仍然比我希望的要简洁一些,但它确实将问题简化为只确定视图中有哪些字段。

如果视图只需要某些属性,请仅使用这些属性创建一个接口。在HttpGet和HttpPost方法中使用此接口


然后,您可以使用AutoMapper之类的工具将viewmodel映射到实体。

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


然后,您可以使用AutoMapper之类的工具将viewmodel映射到您的实体。

这比在控制器中一次复制一个字段要复杂得多!这确实让我想到了使用New With{model.Email}并将其传递到一个函数中,以便将属性从数据库复制到项目中。不完全是我的目标,但肯定比我的目标更整洁,所以+1,但没有回答这个问题,这比在控制器中一次一个地在字段上复制更多的工作!这确实让我想到了使用New With{model.Email}并将其传递到一个函数中,以便将属性从数据库复制到项目中。这不完全是我的目标,但肯定比我用的+1要简洁一些,但到目前为止还没有回答这个问题,我最好的办法是找到视图文件,读入源文本并使用正则表达式来定位字段。这是混乱的,尤其是如果我有部分的观点。它还涉及递归地使用反射,以允许字段通过属性访问其他记录。到目前为止,我的最佳想法是找到视图文件,在中读取源文本,并使用正则表达式来定位字段。这是混乱的,尤其是如果我有部分的观点。它还涉及递归地使用反射,以允许字段通过属性访问其他记录