在MVC 3模型ID属性中,ScaffoldColumn属性的真正优势是什么设置为False

时间:2012-05-08 05:30:16

标签: asp.net-mvc asp.net-mvc-3 scaffolding

我是MVC的新手,当我为代码优先方法构建模型类时,每个密钥ID列都设置了属性[ScaffoldColumn(false)]。我这样做是因为我不希望显然在视图中显示ID,而且我知道解决这个问题的方法是删除包含ID字段的每个视图中UI生成的HTML。

我在模型中使用ScaffoldColumn设置为false时遇到的问题首先被注意到,当视图的编辑方法被触发时,我收到此错误:存储更新,插入,或删除语句影响了意外的行数(0)。当我在调试中运行代码时,ID属性实际上设置为零,如我的视图编辑HttpPost方法所示。

我希望有人可能会详细说明我的问题,如果没有将ID发送到控制器方法(如本例中为编辑{),那么在MVC中使用ScaffoldColumn这样的属性是有意义的。 {1}}?我是否应该采用旧时尚方式,并删除由此属性未添加到键/外键属性时生成的MVC模板创建的每个视图中的HTML标记?

我发现,如果您将此属性设置为HttpPost,则会向每个false方法添加ID参数,而不是在调用HttpPost之前设置相应的ID属性字段。

4 个答案:

答案 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向导。