2

Telerik MVC グリッドがあります。

列の 1 つは、特定のユーザーから非表示にする必要があります。

これは、.Visible を使用して簡単に実現できます。

問題は、行の編集モードを起動すると、非表示にしたい列が編集ビューに表示されることです。

グリッド ビューと編集ビューの両方から列を非表示にする方法はありますか?

編集: ポップアップ編集モードと Ajax バインディングを使用しています。

4

3 に答える 3

5

編集フォームからの列の非表示は、編集モードによって異なります。使用している編集モードを指定していないため、すべての編集モードの解決策を示します。

  • Inline および InCell - 列を作成するだけReadonly()で、編集できなくなります。

  • ポップアップまたはインフォーム - これらのモードHtml.EditorForModelは、モデルのすべてのプロパティを表示するように設計されています。その結果、列としてバインドされていないプロパティも表示されます。編集フォームから何かを隠すには、OnEditイベントを介して JavaScript で行う必要があります。ただし、OnEdit イベントは Ajax バインド中にのみ発生します。ajax を使用しているか、サーバー バインディングを使用しているかは、説明から明らかではありません。サーバー バインディングを使用する場合は、OnLoad JavaScript イベントにフックし、jQuery を使用してエディターから不要な列を非表示にする必要があります。

于 2011-06-02T05:47:56.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 に答える
0

Atanas の優れた応答に加えて、サーバー バインディングを使用している場合は、Html.EditorForModel が ShowForDisplay および ShowForEdit プロパティを使用して、プロパティのスキャフォールドをいつ作成するかを決定できるという事実を利用できます。残念ながら、これらを個別に設定する組み込みの方法はありませんが、独自の ModelMetadataProvider を作成して登録することができます。この SO 回答のコードを使用したため、編集フォームに表示される内容を C# コードで簡単に指定できました。

EditorForModel と MVC2 の DisplayForModel モードで異なるフィールドを表示する

于 2011-08-20T20:34:23.870 に答える