我有一个视图和一个模型(比如Car)。一个字段可在表单中编辑(仅显示其他信息)。当视图表单发布时,我需要所有信息,而不仅仅是editable属性。但是所有其他属性都是null。
我曾经创建过隐藏字段来发布数据,但是当你拥有比非隐藏字段更多的隐藏字段时,它会使代码变得非常脏。
有没有办法在不使用隐藏字段的情况下发布模型的所有属性?
答案 0 :(得分:5)
您应该仅将ViewModel与可编辑字段一起使用。 在视图中,只需将模型的id作为隐藏字段放在数据库中。
在您的控制器中,从数据库中获取模型。然后做一些检查是否确实可以修改此项目(有人可以使用Firebug更改隐藏字段中的ID)。
然后,只需使用ViewModel中的字段更新数据库模型...并再次将模型保存到数据库。
如果您在视图中使用CAR模型,有人可能会更改超出您允许的字段...如果您使用CarViewModel,则不可能,因为模型绑定器只会绑定视图模型的属性。
答案 1 :(得分:2)
以html格式发布的数据是输入内容。如果您在帖子上需要这些数据,我认为隐藏字段不存在问题,这是隐藏字段的用途。
话虽如此,如果你真的想减少隐藏字段的ammont,你可以在一个字段中“序列化”所有这些信息,然后在帖子中“反序列化”它。或者在自定义Model Binder中。
但是如果你想要在Asp.Net MVC中开箱即用的ModelBinder的魔力,你必须使用表单字段。
答案 2 :(得分:-1)
如果您反对在隐藏字段中发布信息,则另一个选项是将它们包含在查询字符串中。