2

我有一个 Telerik MVC 网格。

其中 1 列需要对某些用户隐藏。

这很容易使用 .Visible 实现

问题是,当我为该行启动编辑模式时,我想要隐藏的列显示在编辑视图中。

知道如何从网格视图和编辑视图中隐藏列吗?

编辑:我正在使用 Pop Up 编辑模式和 Ajax 绑定。

4

3 回答 3

5

从编辑表单中隐藏列取决于编辑模式。您还没有指定您使用的编辑模式,所以我将为每一个提供一个解决方案:

  • Inline 和 InCell - 您只需要创建列Readonly(),它将不再可编辑。

  • Popup 或 InForm - 这些模式使用Html.EditorForModel这些模式按设计显示模型的所有属性。结果,即使是未绑定为列的属性也会显示出来。从编辑表单中隐藏某些内容必须通过OnEdit事件使用 JavaScript 完成。但是 OnEdit 事件仅在 Ajax 绑定期间引发。从您的描述中不清楚您是使用 ajax 还是服务器绑定。如果您使用服务器绑定,您必须挂钩到OnLoad JavaScript 事件并使用 jQuery 从编辑器中隐藏不必要的列。

于 2011-06-02T05:47:56.870 回答
0

除了 Atanas 的出色响应之外,如果您使用服务器绑定,您可以使用 Html.EditorForModel 使用 ShowForDisplay 和 ShowForEdit 属性来确定何时为属性创建脚手架。不幸的是,没有内置方法可以独立设置这些,但您可以创建和注册自己的 ModelMetadataProvider。我使用了这个 SO 答案中的代码,它让我可以轻松地指定在 C# 代码的编辑表单上显示的内容。

在 MVC2 中的 EditorForModel 与 DisplayForModel 模式中显示不同的字段

于 2011-08-20T20:34:23.870 回答
0

我希望这会有所帮助......并且对于行之间的所有空间感到抱歉,但是没有它,代码看起来很乱。

就像 Atanas Korchev 所说,您可以使用 javascript,但有一种更简单的方法。您可以将您的列定义为<ScaffoldColumn(False)> :

Public Class EntityS

    <Key()> _
    <ComponentModel.ReadOnly(True)> _
    <DisplayName("Id")> _
    <ComponentModel.DataAnnotations.Editable(False)> _
    **<ScaffoldColumn(False)> _**
    Public Property Id_EntityS As Integer

    ...

    ...

End Class



@(Html.Telerik().Grid(Of EntityS)() _

   .Name("Grid") _

   .DataKeys(Sub(keys)

             keys.Add("Id_EntityS")

    End Sub) _

    .ToolBar(Sub(commands)

                 commands.Insert().ButtonType(GridButtonType.ImageAndText) _
                                 .ImageHtmlAttributes(New With {.style = "margin-left:0"})

                 End Sub) _

      .DataBinding(Sub(dataBinding)

       dataBinding.Ajax() _

       ...

       End Sub) _

       .Columns(Sub(columns)

        ...

        columns.Command(Sub(commands)

        commands.Edit().ButtonType(GridButtonType.ImageAndText)

        commands.Delete().ButtonType(GridButtonType.ImageAndText)

        commands.Edit.HtmlAttributes("onedit")

        End Sub).Width(180).Title("Commands")

        End Sub) _

        .Editable(Sub(editing)

        editing.Mode(GridEditMode.PopUp).Window(Sub(window)

        End Sub)

        End Sub) _

        ....)
于 2012-01-20T16:25:38.413 回答