【问题标题】:What is the Real Advantage to ScaffoldColumn Attribute set to False in MVC 3 Model ID Properties在 MVC 3 模型 ID 属性中将 ScaffoldColumn 属性设置为 False 的真正优势是什么
【发布时间】:2012-05-08 05:30:15
【问题描述】:

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

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

我希望有人能详细说明的问题是,如果没有将 ID 发送到控制器方法(例如在本例中为 Edit HttpPost),那么在 MVC 中拥有像 ScaffoldColumn 这样的属性有什么意义? ?我是否应该以旧的方式进行此操作,并删除当该属性未添加到键/外键属性时生成的 MVC 寺庙创建的每个视图中的 HTML 标记?

如果将此属性设置为false,我发现的解决方法是为每个HttpPost 方法添加一个ID 参数,而不是在调用SaveChanges() 之前设置适当的ID 属性字段。

【问题讨论】:

  • 本篇博主讲解ScaffoldColumn的使用方法。如果你更像我这样的视觉专家,你会喜欢这篇文章的。它有屏幕截图、视频和所有内容。 20fingers2brains.blogspot.se/2013/03/…

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


【解决方案1】:

您可以为此使用数据注释并使用:

[HiddenInput(DisplayValue=false)]

这样,您的字段将使用视图中的隐藏输入显示。无需做任何更改,视图会知道如何显示它。

【讨论】:

    【解决方案2】:

    好吧,您不希望它被搭建成一个可编辑的字段,但您当然希望它在表单中,正如您所注意到的。解决方案是手动将其添加为视图中的隐藏字段。像这样的:

    @Html.HiddenFor(model => model.id)
    

    【讨论】:

    • 这是一个很好的解决方法,我没有想到,但是大多数 MVC 程序员处理在视图中隐藏关键属性的常见方式是什么,或者你的示例是设置 Scaffolding 时的标准方式然后在视图上添加一个隐藏字段?谢谢...
    • 不确定标准方式是什么,但我就是这样做的。令人惊讶的是,显然没有办法将一个字段设置为隐藏的。您可以使 EditorFor 将属性呈现为隐藏字段,但是:stackoverflow.com/questions/4542972/…
    • ...补充一下,我认为一般来说脚手架并不意味着可以投入生产,只是一种快速获得功能的方法。
    • 我也认为,@Html.HiddenFor 是迄今为止 MVC 在这种情况下的标准方式
    【解决方案3】:

    [ScaffoldColumn(false)],它只是隐藏了属性。 假设您有一个 id 自动递增的属性。 用户与此属性没有任何关系。 所以用它来隐藏 View 中的属性。

    【讨论】:

      猜你喜欢
      • 2013-05-01
      • 2011-07-12
      • 1970-01-01
      • 2014-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多