我是MVC的新手,当我为代码优先方法构建模型类时,每个密钥ID列都设置了属性[ScaffoldColumn(false)]
。我这样做是因为我不希望显然在视图中显示ID,而且我知道解决这个问题的方法是删除包含ID字段的每个视图中UI生成的HTML。
我在模型中使用ScaffoldColumn
设置为false
时遇到的问题首先被注意到,当视图的编辑方法被触发时,我收到此错误:存储更新,插入,或删除语句影响了意外的行数(0)。当我在调试中运行代码时,ID属性实际上设置为零,如我的视图编辑HttpPost
方法所示。
我希望有人可能会详细说明我的问题,如果没有将ID发送到控制器方法(如本例中为编辑{),那么在MVC中使用ScaffoldColumn
这样的属性是有意义的。 {1}}?我是否应该采用旧时尚方式,并删除由此属性未添加到键/外键属性时生成的MVC模板创建的每个视图中的HTML标记?
我发现,如果您将此属性设置为HttpPost
,则会向每个false
方法添加ID参数,而不是在调用HttpPost
之前设置相应的ID属性字段。
答案 0 :(得分:3)
您可以使用数据注释并使用:
[HiddenInput(DisplayValue=false)]
这样,您的字段将使用隐藏的输入显示在视图中。无需进行任何更改,视图将知道如何显示它。
答案 1 :(得分:2)
嗯,你不希望它被搭建成一个可编辑的字段,当然你确实想要它在表单中,正如你所注意到的那样。解决方案是将其手动添加为视图中的隐藏字段。像这样:
@Html.HiddenFor(model => model.id)
答案 2 :(得分:2)
[ScaffoldColumn(false)],它只是隐藏属性。 假设您有一个id自动递增属性。 用户与此属性没有任何关系。 因此,使用它可以在View中隐藏属性。
答案 3 :(得分:0)
ScaffoldColumn仅更改实际使用default templated views system introduced in MVC 2的Html.DisplayForModel()等方法的行为。它不会影响随MVC提供的Visual Studio向导。